summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_G2D_g2d_renderer.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/NNS_G2D_g2d_renderer.s')
-rw-r--r--arm9/asm/NNS_G2D_g2d_renderer.s1984
1 files changed, 1984 insertions, 0 deletions
diff --git a/arm9/asm/NNS_G2D_g2d_renderer.s b/arm9/asm/NNS_G2D_g2d_renderer.s
new file mode 100644
index 00000000..5cd5eaac
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_renderer.s
@@ -0,0 +1,1984 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global firstSRTransformedMtxIdx_
+firstSRTransformedMtxIdx_: ; 0x02106570
+ .short -2
+ .balign 4, 0
+
+ .global currenVramTransferHandle_
+currenVramTransferHandle_: ; 0x02106574
+ .word -1
+
+ .global mtxI_
+mtxI_: ; 0x02106578
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+ .global currentMtxCachePos_
+currentMtxCachePos_: ; 0x021CDD60
+ .space 0x4
+
+ .global groupID_
+groupID_: ; 0x021CDD64
+ .space 0x4
+
+ .global bDonotUseSRTransform
+bDonotUseSRTransform: ; 0x021CDD68
+ .space 0x4
+
+ .global pCurrentInstance_
+pCurrentInstance_: ; 0x021CDD6C
+ .space 0x4
+
+ .global stackPos_
+stackPos_: ; 0x021CDD70
+ .space 0x4
+
+ .global fxZStack_
+fxZStack_: ; 0x021CDD74
+ .space 0x80
+
+ .global mtxStateStack_
+mtxStateStack_: ; 0x021CDDF4
+ .space 0x100
+
+ .global mtxStack_
+mtxStack_: ; 0x021CDEF4
+ .space 0x300
+
+ .global mtxStackFor2DHW_
+mtxStackFor2DHW_: ; 0x021CE1F4
+ .space 0x300
+
+ .global mtxCacheBuffer_
+mtxCacheBuffer_: ; 0x021CE4F4
+ .space 0x400
+
+ .global mcRenderState_
+mcRenderState_: ; 0x021CE8F4
+ .space 0x408
+
+ .section .text
+
+ arm_func_start NNS_G2dSetRendererImageProxy
+NNS_G2dSetRendererImageProxy: ; 0x020B2780
+ ldr ip, _020B2788 ; =NNS_G2dSetRndCoreImageProxy
+ bx r12
+ .balign 4
+_020B2788: .word NNS_G2dSetRndCoreImageProxy
+ arm_func_end NNS_G2dSetRendererImageProxy
+
+ arm_func_start NNS_G2dGetRendererPaletteTbl
+NNS_G2dGetRendererPaletteTbl: ; 0x020B278C
+ ldr r0, [r0, #0x78]
+ bx lr
+ arm_func_end NNS_G2dGetRendererPaletteTbl
+
+ arm_func_start NNS_G2dRotZ
+NNS_G2dRotZ: ; 0x020B2794
+ stmdb sp!, {lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B2894 ; =stackPos_
+ mov lr, #0x0
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2898 ; =mtxStack_
+ mov r2, #0x18
+ str r1, [sp, #0x0]
+ str r1, [sp, #0xc]
+ mla r1, r12, r2, r3
+ rsb r3, r0, #0x0
+ str r0, [sp, #0x4]
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x8]
+ str lr, [sp, #0x10]
+ str lr, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2894 ; =stackPos_
+ ldr r1, _020B289C ; =mtxStackFor2DHW_
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B28A0 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2824
+ ldr r1, _020B28A4 ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B28A8 ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B2828
+_020B2824:
+ mov r0, #0x0
+_020B2828:
+ cmp r0, #0x0
+ ldreq r1, _020B2894 ; =stackPos_
+ ldreq r0, _020B28A4 ; =firstSRTransformedMtxIdx_
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B2894 ; =stackPos_
+ ldr r1, _020B28AC ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B288C
+ ; Jump table
+ b _020B2870 ; case 0
+ b _020B288C ; case 1
+ b _020B2870 ; case 2
+ b _020B2870 ; case 3
+_020B2870:
+ ldr r0, _020B28B0 ; =groupID_
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B288C:
+ add sp, sp, #0x1c
+ ldmia sp!, {pc}
+ .balign 4
+_020B2894: .word stackPos_
+_020B2898: .word mtxStack_
+_020B289C: .word mtxStackFor2DHW_
+_020B28A0: .word bDonotUseSRTransform
+_020B28A4: .word firstSRTransformedMtxIdx_
+_020B28A8: .word 0x0000FFFE
+_020B28AC: .word mtxStateStack_
+_020B28B0: .word groupID_
+ arm_func_end NNS_G2dRotZ
+
+ arm_func_start NNS_G2dScale
+NNS_G2dScale: ; 0x020B28B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B29E8 ; =stackPos_
+ mov r12, #0x0
+ ldr r3, [r2, #0x0]
+ mov r4, r1
+ ldr r2, _020B29EC ; =mtxStack_
+ mov r1, #0x18
+ mla r1, r3, r1, r2
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r2, r1
+ str r5, [sp, #0x0]
+ str r12, [sp, #0x4]
+ str r12, [sp, #0x8]
+ str r4, [sp, #0xc]
+ str r12, [sp, #0x10]
+ str r12, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ mov r0, r5
+ bl FX_Inv
+ mov r1, #0x0
+ str r0, [sp, #0x0]
+ mov r0, r4
+ str r1, [sp, #0x4]
+ str r1, [sp, #0x8]
+ bl FX_Inv
+ mov r3, #0x0
+ ldr r1, _020B29E8 ; =stackPos_
+ str r0, [sp, #0xc]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B29F0 ; =mtxStackFor2DHW_
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x10]
+ str r3, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B29F4 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2978
+ ldr r1, _020B29F8 ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B29FC ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B297C
+_020B2978:
+ mov r0, #0x0
+_020B297C:
+ cmp r0, #0x0
+ ldreq r1, _020B29E8 ; =stackPos_
+ ldreq r0, _020B29F8 ; =firstSRTransformedMtxIdx_
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B29E8 ; =stackPos_
+ ldr r1, _020B2A00 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B29E0
+ ; Jump table
+ b _020B29C4 ; case 0
+ b _020B29E0 ; case 1
+ b _020B29C4 ; case 2
+ b _020B29C4 ; case 3
+_020B29C4:
+ ldr r0, _020B2A04 ; =groupID_
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B29E0:
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B29E8: .word stackPos_
+_020B29EC: .word mtxStack_
+_020B29F0: .word mtxStackFor2DHW_
+_020B29F4: .word bDonotUseSRTransform
+_020B29F8: .word firstSRTransformedMtxIdx_
+_020B29FC: .word 0x0000FFFE
+_020B2A00: .word mtxStateStack_
+_020B2A04: .word groupID_
+ arm_func_end NNS_G2dScale
+
+ arm_func_start NNS_G2dTranslate
+NNS_G2dTranslate: ; 0x020B2A08
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r3, _020B2AEC ; =bDonotUseSRTransform
+ mov r4, r2
+ ldr r2, [r3, #0x0]
+ cmp r2, #0x0
+ beq _020B2A6C
+ ldr r2, _020B2AF0 ; =stackPos_
+ mov r3, #0x18
+ ldr r2, [r2, #0x0]
+ ldr lr, _020B2AF4 ; =mtxStack_ + 0x10
+ mul r5, r2, r3
+ ldr r3, [lr, r5]
+ ldr ip, _020B2AF8 ; =mtxStack_ + 0x14
+ add r0, r3, r0
+ str r0, [lr, r5]
+ ldr r0, [r12, r5]
+ ldr r3, _020B2AFC ; =fxZStack_
+ add r0, r0, r1
+ str r0, [r12, r5]
+ ldr r0, [r3, r2, lsl #0x2]
+ add sp, sp, #0x1c
+ add r0, r0, r4
+ str r0, [r3, r2, lsl #0x2]
+ ldmia sp!, {r4-r5,pc}
+_020B2A6C:
+ ldr r2, _020B2AF0 ; =stackPos_
+ mov lr, #0x1000
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2B00 ; =mtxStack_
+ mov r2, #0x18
+ str r1, [sp, #0x14]
+ mla r1, r12, r2, r3
+ mov r3, #0x0
+ str r0, [sp, #0x10]
+ add r0, sp, #0x0
+ mov r2, r1
+ str lr, [sp, #0x0]
+ str r3, [sp, #0x4]
+ str r3, [sp, #0x8]
+ str lr, [sp, #0xc]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2AF0 ; =stackPos_
+ ldr r1, _020B2B04 ; =mtxStackFor2DHW_
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2AF0 ; =stackPos_
+ ldr r2, _020B2AFC ; =fxZStack_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r2, r1, lsl #0x2]
+ add r0, r0, r4
+ str r0, [r2, r1, lsl #0x2]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B2AEC: .word bDonotUseSRTransform
+_020B2AF0: .word stackPos_
+_020B2AF4: .word mtxStack_ + 0x10
+_020B2AF8: .word mtxStack_ + 0x14
+_020B2AFC: .word fxZStack_
+_020B2B00: .word mtxStack_
+_020B2B04: .word mtxStackFor2DHW_
+ arm_func_end NNS_G2dTranslate
+
+ arm_func_start NNS_G2dPopMtx
+NNS_G2dPopMtx: ; 0x020B2B08
+ ldr r0, _020B2B4C ; =stackPos_
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movle r0, #0x1
+ movgt r0, #0x0
+ cmp r0, #0x0
+ bxne lr
+ ldr r1, _020B2B4C ; =stackPos_
+ ldr r0, _020B2B50 ; =firstSRTransformedMtxIdx_
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ sub r3, r3, #0x1
+ str r3, [r1, #0x0]
+ cmp r2, r3
+ ldrgt r1, _020B2B54 ; =0x0000FFFE
+ strgth r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B2B4C: .word stackPos_
+_020B2B50: .word firstSRTransformedMtxIdx_
+_020B2B54: .word 0x0000FFFE
+ arm_func_end NNS_G2dPopMtx
+
+ arm_func_start NNS_G2dPushMtx
+NNS_G2dPushMtx: ; 0x020B2B58
+ stmdb sp!, {r4-r10,lr}
+ ldr r0, _020B2D74 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x7c]
+ ands r0, r0, #0x1
+ bne _020B2CA4
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r1, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ add r5, r1, #0x1
+ cmp r5, #0x20
+ mov r4, r0, lsr #0x10
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ beq _020B2C44
+ ldr r0, _020B2D7C ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2BE4
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =fxZStack_
+ mul r8, r3, r0
+ ldr r6, _020B2D84 ; =mtxStack_ + 0x10
+ mul r7, r5, r0
+ ldr r2, [r6, r8]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =mtxStack_ + 0x14
+ str r2, [r6, r7]
+ ldr r2, [r3, r8]
+ str r0, [r1, r5, lsl #0x2]
+ str r2, [r3, r7]
+ b _020B2C3C
+_020B2BE4:
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r7, _020B2D80 ; =fxZStack_
+ mul lr, r2, r0
+ ldr r1, _020B2D8C ; =mtxStack_
+ mul r12, r5, r0
+ ldr r8, _020B2D90 ; =mtxStackFor2DHW_
+ add r10, r1, lr
+ ldr r6, [r7, r2, lsl #0x2]
+ add r9, r1, r12
+ ldmia r10!, {r0-r3}
+ stmia r9!, {r0-r3}
+ ldmia r10, {r0-r1}
+ str r6, [r7, r5, lsl #0x2]
+ add r7, r8, lr
+ stmia r9, {r0-r1}
+ add r6, r8, r12
+ ldmia r7!, {r0-r3}
+ stmia r6!, {r0-r3}
+ ldmia r7, {r0-r1}
+ stmia r6, {r0-r1}
+_020B2C3C:
+ ldr r0, _020B2D78 ; =stackPos_
+ str r5, [r0, #0x0]
+_020B2C44:
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r2, _020B2D94 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r5, r4, lsl #0x3
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ add r4, r2, r4, lsl #0x3
+ mov r6, r3, lsl #0x3
+ ldrh r1, [r2, r5]
+ ldrh r0, [r4, #0x2]
+ add r3, r2, r3, lsl #0x3
+ strh r1, [r2, r6]
+ strh r0, [r3, #0x2]
+ ldrh r2, [r4, #0x4]
+ ldrh r0, [r4, #0x6]
+ ldr r1, _020B2D98 ; =mtxStateStack_ + 0x4
+ strh r2, [r3, #0x4]
+ strh r0, [r3, #0x6]
+ ldrh r0, [r1, r5]
+ cmp r0, #0x1
+ moveq r0, #0x2
+ streqh r0, [r1, r6]
+ strneh r0, [r1, r6]
+ ldmia sp!, {r4-r10,pc}
+_020B2CA4:
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r0, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r4, #0x20
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ ldr r0, _020B2D7C ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2D10
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =fxZStack_
+ mul r7, r3, r0
+ ldr r5, _020B2D84 ; =mtxStack_ + 0x10
+ mul r6, r4, r0
+ ldr r2, [r5, r7]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =mtxStack_ + 0x14
+ str r2, [r5, r6]
+ ldr r2, [r3, r7]
+ str r0, [r1, r4, lsl #0x2]
+ str r2, [r3, r6]
+ b _020B2D68
+_020B2D10:
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr ip, _020B2D80 ; =fxZStack_
+ mul r9, r2, r0
+ ldr r1, _020B2D8C ; =mtxStack_
+ mul r8, r4, r0
+ ldr lr, _020B2D90 ; =mtxStackFor2DHW_
+ add r6, r1, r9
+ ldr r5, [r12, r2, lsl #0x2]
+ add r7, r1, r8
+ ldmia r6!, {r0-r3}
+ stmia r7!, {r0-r3}
+ ldmia r6, {r0-r1}
+ add r6, lr, r9
+ stmia r7, {r0-r1}
+ add lr, lr, r8
+ ldmia r6!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r6, {r0-r1}
+ stmia lr, {r0-r1}
+ str r5, [r12, r4, lsl #0x2]
+_020B2D68:
+ ldr r0, _020B2D78 ; =stackPos_
+ str r4, [r0, #0x0]
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B2D74: .word pCurrentInstance_
+_020B2D78: .word stackPos_
+_020B2D7C: .word bDonotUseSRTransform
+_020B2D80: .word fxZStack_
+_020B2D84: .word mtxStack_ + 0x10
+_020B2D88: .word mtxStack_ + 0x14
+_020B2D8C: .word mtxStack_
+_020B2D90: .word mtxStackFor2DHW_
+_020B2D94: .word mtxStateStack_
+_020B2D98: .word mtxStateStack_ + 0x4
+ arm_func_end NNS_G2dPushMtx
+
+ arm_func_start NNS_G2dDrawMultiCellAnimation
+NNS_G2dDrawMultiCellAnimation: ; 0x020B2D9C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldrh r0, [r4, #0x56]
+ cmp r0, #0x0
+ bne _020B2DBC
+ add r0, r4, #0x30
+ bl NNS_G2dDrawMultiCell
+ ldmia sp!, {r4-r6,pc}
+_020B2DBC:
+ bl NNS_G2dPushMtx
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x8
+ beq _020B2E0C
+ ldr r0, _020B2E70 ; =pCurrentInstance_
+ ldrsh r6, [r4, #0x52]
+ ldr r0, [r0, #0x0]
+ ldrsh r5, [r4, #0x50]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B2E70 ; =pCurrentInstance_
+ rsbne r5, r5, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r6, r6, #0x0
+ mov r0, r5, lsl #0xc
+ mov r1, r6, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B2E0C:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x4
+ beq _020B2E40
+ ldrh r0, [r4, #0x54]
+ ldr r2, _020B2E74 ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B2E40:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x2
+ beq _020B2E5C
+ ldr r0, [r4, #0x48]
+ ldr r1, [r4, #0x4c]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B2E5C:
+ add r0, r4, #0x30
+ bl NNS_G2dDrawMultiCell
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B2E70: .word pCurrentInstance_
+_020B2E74: .word FX_SinCosTable_
+ arm_func_end NNS_G2dDrawMultiCellAnimation
+
+ arm_func_start NNS_G2dDrawMultiCell
+NNS_G2dDrawMultiCell: ; 0x020B2E78
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x1
+ bne _020B309C
+ ldr r0, [r5, #0x0]
+ mov r2, #0x0
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x0
+ bls _020B2ED0
+ ldr r3, _020B3174 ; =mcRenderState_
+ mov r4, r2
+_020B2EAC:
+ add r0, r3, r2, lsl #0x2
+ str r4, [r0, #0x4]
+ ldr r0, [r5, #0x0]
+ add r2, r2, #0x1
+ ldrh r1, [r0, #0x2]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0x10
+ cmp r2, r1
+ blo _020B2EAC
+_020B2ED0:
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ mov r6, #0x1
+ ldr r1, [r0, #0x0]
+ ldr r0, _020B3174 ; =mcRenderState_
+ str r6, [r0, #0x404]
+ ldr r0, [r1, #0x80]
+ cmp r0, #0x0
+ beq _020B2FD8
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ str r0, [sp, #0x0]
+ mov r0, r6
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B2FC0
+ mov r11, r7
+_020B2F28:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =mcRenderState_
+ strh r8, [r0, #0x0]
+ bl NNS_G2dPushMtx
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ mov r2, r11
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl NNS_G2dTranslate
+ mov r0, #0x58
+ mla r0, r8, r0, r9
+ bl DrawCellAnimationImpl_
+ mov r0, r6
+ bl NNS_G2dPopMtx
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2F28
+_020B2FC0:
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, [sp, #0x0]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ b _020B3088
+_020B2FD8:
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B3088
+ str r7, [sp, #0x4]
+ mov r11, #0x58
+_020B2FF4:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =mcRenderState_
+ strh r8, [r0, #0x0]
+ bl NNS_G2dPushMtx
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ ldr r2, [sp, #0x4]
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl NNS_G2dTranslate
+ mla r0, r8, r11, r9
+ bl DrawCellAnimationImpl_
+ mov r0, r6
+ bl NNS_G2dPopMtx
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2FF4
+_020B3088:
+ ldr r0, _020B3174 ; =mcRenderState_
+ mov r1, #0x0
+ str r1, [r0, #0x404]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B309C:
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r7, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ cmp r0, #0x0
+ beq _020B312C
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ mov r6, r0
+ mov r0, #0x1
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ bls _020B3110
+ mov r8, #0x28
+_020B30EC:
+ mla r0, r4, r8, r7
+ bl DrawNode_
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B30EC
+_020B3110:
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ mov r0, r6
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B312C:
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ addls sp, sp, #0xc
+ ldmlsia sp!, {r4-r11,pc}
+ mov r6, #0x28
+_020B3148:
+ mla r0, r4, r6, r7
+ bl DrawNode_
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B3148
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3174: .word mcRenderState_
+_020B3178: .word pCurrentInstance_
+ arm_func_end NNS_G2dDrawMultiCell
+
+ arm_func_start NNS_G2dDrawCellAnimation
+NNS_G2dDrawCellAnimation: ; 0x020B317C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B31EC ; =pCurrentInstance_
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x80]
+ cmp r1, #0x0
+ beq _020B31E0
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ mov r4, r0
+ mov r0, #0x1
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B31EC ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ mov r0, r5
+ bl DrawCellAnimationImpl_
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ mov r0, r4
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B31E0:
+ bl DrawCellAnimationImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B31EC: .word pCurrentInstance_
+ arm_func_end NNS_G2dDrawCellAnimation
+
+ arm_func_start NNS_G2dEndRendering
+NNS_G2dEndRendering: ; 0x020B31F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B3260 ; =0x04000448
+ mov r2, #0x1
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ str r2, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r3, [r2, #0x7c]
+ cmp r3, #0x0
+ beq _020B324C
+ ands r0, r3, #0x1
+ ldrne r0, _020B3268 ; =bDonotUseSRTransform
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ ands r0, r3, #0x2
+ beq _020B323C
+ mov r0, #0x0
+ str r0, [r2, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+_020B323C:
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x7c]
+_020B324C:
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B3260: .word 0x04000448
+_020B3264: .word pCurrentInstance_
+_020B3268: .word bDonotUseSRTransform
+ arm_func_end NNS_G2dEndRendering
+
+ arm_func_start NNS_G2dBeginRendering
+NNS_G2dBeginRendering: ; 0x020B326C
+ stmdb sp!, {r4-r8,lr}
+ ldr r5, _020B330C ; =currentMtxCachePos_
+ ldr r3, _020B3310 ; =pCurrentInstance_
+ ldrh r6, [r5, #0x0]
+ ldr r2, _020B3314 ; =stackPos_
+ mov r4, #0x0
+ ldr r7, _020B3318 ; =0x0000FFFE
+ ldr r1, _020B331C ; =firstSRTransformedMtxIdx_
+ str r0, [r3, #0x0]
+ str r4, [r2, #0x0]
+ strh r7, [r1, #0x0]
+ cmp r6, #0x0
+ ble _020B32D0
+ ldr r8, _020B3320 ; =mtxCacheBuffer_
+ mvn r7, #0x0
+ mov r6, #0x10
+_020B32AC:
+ mov r0, r7
+ mov r2, r6
+ add r1, r8, #0x10
+ bl MIi_CpuClearFast
+ ldrh r0, [r5, #0x0]
+ add r4, r4, #0x1
+ add r8, r8, #0x20
+ cmp r4, r0
+ blt _020B32AC
+_020B32D0:
+ ldr r4, _020B330C ; =currentMtxCachePos_
+ mov r0, #0x0
+ ldr r3, _020B3324 ; =groupID_
+ ldr r1, _020B3328 ; =mtxStateStack_
+ mov r2, #0x100
+ strh r0, [r4, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r1, _020B332C ; =0x04000444
+ mov r2, #0x0
+ ldr r0, _020B3330 ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bl NNSi_G2dIdentity
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B330C: .word currentMtxCachePos_
+_020B3310: .word pCurrentInstance_
+_020B3314: .word stackPos_
+_020B3318: .word 0x0000FFFE
+_020B331C: .word firstSRTransformedMtxIdx_
+_020B3320: .word mtxCacheBuffer_
+_020B3324: .word groupID_
+_020B3328: .word mtxStateStack_
+_020B332C: .word 0x04000444
+_020B3330: .word 0x04000454
+ arm_func_end NNS_G2dBeginRendering
+
+ arm_func_start NNS_G2dInitRenderSurface
+NNS_G2dInitRenderSurface: ; 0x020B3334
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, r4
+ mov r0, #0x0
+ mov r2, #0x48
+ bl MIi_CpuClear16
+ mov r0, #0x1
+ str r0, [r4, #0x10]
+ mov r0, #0x3
+ ldr r1, _020B3380 ; =RndCoreCBFuncBeforeCell_
+ str r0, [r4, #0x14]
+ ldr r0, _020B3384 ; =RndCoreCBFuncAfterCell_
+ str r1, [r4, #0x18]
+ ldr r1, _020B3388 ; =RndCoreCBFuncBeforeOBJ_
+ str r0, [r4, #0x1c]
+ ldr r0, _020B338C ; =RndCoreCBFuncAfterOBJ_
+ str r1, [r4, #0x20]
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3380: .word RndCoreCBFuncBeforeCell_
+_020B3384: .word RndCoreCBFuncAfterCell_
+_020B3388: .word RndCoreCBFuncBeforeOBJ_
+_020B338C: .word RndCoreCBFuncAfterOBJ_
+ arm_func_end NNS_G2dInitRenderSurface
+
+ arm_func_start NNS_G2dAddRendererTargetSurface
+NNS_G2dAddRendererTargetSurface: ; 0x020B3390
+ ldr r2, [r0, #0x70]
+ str r2, [r1, #0x30]
+ str r1, [r0, #0x70]
+ bx lr
+ arm_func_end NNS_G2dAddRendererTargetSurface
+
+ arm_func_start NNS_G2dInitRenderer
+NNS_G2dInitRenderer: ; 0x020B33A0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl NNS_G2dInitRndCore
+ mov r7, #0x0
+ str r7, [r4, #0x70]
+ str r7, [r4, #0x74]
+ str r7, [r4, #0x78]
+ str r7, [r4, #0x7c]
+ str r7, [r4, #0x80]
+ str r7, [r4, #0x84]
+ strh r7, [r4, #0x88]
+ strh r7, [r4, #0x8a]
+ str r7, [r4, #0x8c]
+ str r7, [r4, #0x90]
+ ldr r1, _020B3454 ; =stackPos_
+ strh r7, [r4, #0x94]
+ ldr r2, _020B3458 ; =0x0000FFFE
+ ldr r0, _020B345C ; =firstSRTransformedMtxIdx_
+ ldr r6, _020B3460 ; =mtxCacheBuffer_
+ str r7, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ mvn r5, #0x0
+ mov r4, #0x10
+_020B3400:
+ mov r0, r5
+ mov r2, r4
+ add r1, r6, #0x10
+ bl MIi_CpuClearFast
+ add r7, r7, #0x1
+ cmp r7, #0x20
+ add r6, r6, #0x20
+ blt _020B3400
+ ldr ip, _020B3464 ; =currentMtxCachePos_
+ mov r0, #0x0
+ ldr r3, _020B3468 ; =groupID_
+ ldr r1, _020B346C ; =mtxStateStack_
+ mov r2, #0x100
+ strh r0, [r12, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B3470 ; =bDonotUseSRTransform
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B3454: .word stackPos_
+_020B3458: .word 0x0000FFFE
+_020B345C: .word firstSRTransformedMtxIdx_
+_020B3460: .word mtxCacheBuffer_
+_020B3464: .word currentMtxCachePos_
+_020B3468: .word groupID_
+_020B346C: .word mtxStateStack_
+_020B3470: .word bDonotUseSRTransform
+ arm_func_end NNS_G2dInitRenderer
+
+ arm_func_start DrawNode_
+DrawNode_: ; 0x020B3474
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r4, [r5, #0x0]
+ bl NNS_G2dPushMtx
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x8
+ beq _020B34E4
+ ldr r0, _020B354C ; =pCurrentInstance_
+ ldrsh r7, [r5, #0x1a]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x18]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B354C ; =pCurrentInstance_
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B34E4:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x4
+ beq _020B3518
+ ldrh r0, [r5, #0x1c]
+ ldr r2, _020B3550 ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B3518:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x2
+ beq _020B3534
+ ldr r0, [r5, #0x10]
+ ldr r1, [r5, #0x14]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B3534:
+ mov r0, r4
+ bl DrawCellAnimationImpl_
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B354C: .word pCurrentInstance_
+_020B3550: .word FX_SinCosTable_
+ arm_func_end DrawNode_
+
+ arm_func_start DrawCellAnimationImpl_
+DrawCellAnimationImpl_: ; 0x020B3554
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x4a]
+ ldr r4, [r5, #0x2c]
+ cmp r0, #0x0
+ bne _020B35C0
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B35B0
+ ldr r1, _020B36B4 ; =currenVramTransferHandle_
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl DrawCellImpl_
+ ldr r0, _020B36B4 ; =currenVramTransferHandle_
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35B0:
+ mov r0, r4
+ bl DrawCellImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35C0:
+ bl NNS_G2dPushMtx
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x8
+ beq _020B3610
+ ldr r0, _020B36B8 ; =pCurrentInstance_
+ ldrsh r7, [r5, #0x46]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x44]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B36B8 ; =pCurrentInstance_
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B3610:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x4
+ beq _020B3644
+ ldrh r0, [r5, #0x48]
+ ldr r2, _020B36BC ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B3644:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x2
+ beq _020B3660
+ ldr r0, [r5, #0x3c]
+ ldr r1, [r5, #0x40]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B3660:
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B369C
+ ldr r1, _020B36B4 ; =currenVramTransferHandle_
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl DrawCellImpl_
+ ldr r0, _020B36B4 ; =currenVramTransferHandle_
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ b _020B36A4
+_020B369C:
+ mov r0, r4
+ bl DrawCellImpl_
+_020B36A4:
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B36B4: .word currenVramTransferHandle_
+_020B36B8: .word pCurrentInstance_
+_020B36BC: .word FX_SinCosTable_
+ arm_func_end DrawCellAnimationImpl_
+
+ arm_func_start DrawCellImpl_
+DrawCellImpl_: ; 0x020B36C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020B3B54 ; =pCurrentInstance_
+ mov r10, r0
+ ldr r0, [r5, #0x0]
+ ldr r1, [r0, #0x7c]
+ str r0, [sp, #0x0]
+ ldr r9, [r0, #0x70]
+ ands r0, r1, #0x2
+ beq _020B38EC
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3840
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3720
+ ldr r2, _020B3B5C ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ ldrh r2, [r2, #0x0]
+ cmp r2, r0
+ movne r0, #0x1
+ bne _020B3724
+_020B3720:
+ mov r0, #0x0
+_020B3724:
+ cmp r0, #0x0
+ beq _020B37AC
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r1, [r0, #0x404]
+ cmp r1, #0x0
+ beq _020B3788
+ ldrh r1, [r0, #0x0]
+ ldr r0, _020B3B68 ; =mcRenderState_ + 0x4
+ ldr r1, [r0, r1, lsl #0x2]
+ cmp r1, #0x0
+ bne _020B37AC
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r2, _020B3B70 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ ldr r1, _020B3B64 ; =mcRenderState_
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r3, [r2, r0]
+ ldr r4, _020B3B74 ; =mtxCacheBuffer_
+ ldrh r2, [r1, #0x0]
+ ldr r0, _020B3B68 ; =mcRenderState_ + 0x4
+ add r1, r4, r3, lsl #0x5
+ str r1, [r0, r2, lsl #0x2]
+ b _020B37AC
+_020B3788:
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r1, _020B3B70 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ ldr r2, _020B3B74 ; =mtxCacheBuffer_
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r0, [r1, r0]
+ add r1, r2, r0, lsl #0x5
+_020B37AC:
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =stackPos_
+ ldreq r3, _020B3B78 ; =mtxStack_
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r3
+ beq _020B37FC
+ ldr r2, _020B3B6C ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r2, #0x0]
+ ldr r3, _020B3B7C ; =mtxStack_ + 0x10
+ mul r4, r2, r0
+ ldr r2, _020B3B80 ; =mtxStack_ + 0x14
+ ldr r3, [r3, r4]
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r2, [r2, r4]
+ str r3, [r0, #0x10]
+ str r2, [r0, #0x14]
+_020B37FC:
+ bl NNS_G2dSetRndCoreCurrentMtx2D
+ ldr r1, _020B3B88 ; =currenVramTransferHandle_
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B3830
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3830:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3840:
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r1, _020B3B8C ; =fxZStack_
+ ldr r2, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl NNS_G2dSetRndCore3DSoftSpriteZvalue
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =stackPos_
+ ldreq r2, _020B3B78 ; =mtxStack_
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r2
+ beq _020B38A8
+ ldr r1, _020B3B6C ; =stackPos_
+ mov r0, #0x18
+ ldr r1, [r1, #0x0]
+ ldr r2, _020B3B7C ; =mtxStack_ + 0x10
+ mul r3, r1, r0
+ ldr r1, _020B3B80 ; =mtxStack_ + 0x14
+ ldr r2, [r2, r3]
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r1, [r1, r3]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+_020B38A8:
+ bl NNS_G2dSetRndCoreCurrentMtx3D
+ ldr r1, _020B3B88 ; =currenVramTransferHandle_
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B38DC
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38DC:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38EC:
+ cmp r9, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11,pc}
+ ldr r4, _020B3B6C ; =stackPos_
+ ldr fp, _020B3B78 ; =mtxStack_
+ mov r7, #0x0
+ mov r6, #0x1
+_020B3908:
+ ldr r0, [r9, #0x10]
+ cmp r0, #0x0
+ beq _020B3B40
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3A8C
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ str r9, [r8, #0x74]
+ mov r0, r8
+ bl NNS_G2dSetRndCoreSurface
+ ldr r1, [r9, #0x28]
+ ldr r2, [r9, #0x2c]
+ mov r0, r8
+ bl NNS_G2dSetRndCoreOamRegisterFunc
+ mov r0, r8
+ bl NNS_G2dRndCoreBeginRendering
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ mov r1, r7
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3978
+ ldr r0, _020B3B5C ; =firstSRTransformedMtxIdx_
+ ldrh r2, [r0, #0x0]
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ cmp r2, r0
+ movne r0, r6
+ bne _020B397C
+_020B3978:
+ mov r0, r7
+_020B397C:
+ cmp r0, #0x0
+ beq _020B3A04
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r0, [r0, #0x404]
+ cmp r0, #0x0
+ beq _020B39E4
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldrh r1, [r0, #0x0]
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ bne _020B3A04
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r2, [r4, #0x0]
+ ldrh r1, [r0, #0x0]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =mtxStateStack_
+ ldrh r3, [r0, r2]
+ ldr r0, _020B3B64 ; =mcRenderState_
+ add r2, r0, r1, lsl #0x2
+ ldr r0, _020B3B74 ; =mtxCacheBuffer_
+ add r1, r0, r3, lsl #0x5
+ str r1, [r2, #0x4]
+ b _020B3A04
+_020B39E4:
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, [r4, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =mtxStateStack_
+ ldrh r1, [r0, r1]
+ ldr r0, _020B3B74 ; =mtxCacheBuffer_
+ add r1, r0, r1, lsl #0x5
+_020B3A04:
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r2, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r11
+ beq _020B3A44
+ ldr r2, [r4, #0x0]
+ mov r0, #0x18
+ mla r8, r2, r0, r11
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r3, [r8, #0x10]
+ mov r2, r0
+ str r3, [r2, #0x10]
+ ldr r3, [r8, #0x14]
+ str r3, [r2, #0x14]
+_020B3A44:
+ bl NNS_G2dSetRndCoreCurrentMtx2D
+ ldr r0, _020B3B88 ; =currenVramTransferHandle_
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3A74
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ b _020B3A7C
+_020B3A74:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+_020B3A7C:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+ b _020B3B40
+_020B3A8C:
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ mov r0, r8
+ str r9, [r8, #0x74]
+ bl NNS_G2dSetRndCoreSurface
+ mov r0, r8
+ bl NNS_G2dRndCoreBeginRendering
+ ldr r2, [r4, #0x0]
+ ldr r1, _020B3B8C ; =fxZStack_
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl NNS_G2dSetRndCore3DSoftSpriteZvalue
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r1, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r11
+ beq _020B3AFC
+ ldr r1, [r4, #0x0]
+ mov r0, #0x18
+ mla r3, r1, r0, r11
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r2, [r3, #0x10]
+ mov r1, r0
+ str r2, [r1, #0x10]
+ ldr r2, [r3, #0x14]
+ str r2, [r1, #0x14]
+_020B3AFC:
+ bl NNS_G2dSetRndCoreCurrentMtx3D
+ ldr r0, _020B3B88 ; =currenVramTransferHandle_
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3B2C
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ b _020B3B34
+_020B3B2C:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+_020B3B34:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+_020B3B40:
+ ldr r9, [r9, #0x30]
+ cmp r9, #0x0
+ bne _020B3908
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3B54: .word pCurrentInstance_
+_020B3B58: .word bDonotUseSRTransform
+_020B3B5C: .word firstSRTransformedMtxIdx_
+_020B3B60: .word 0x0000FFFE
+_020B3B64: .word mcRenderState_
+_020B3B68: .word mcRenderState_ + 0x4
+_020B3B6C: .word stackPos_
+_020B3B70: .word mtxStateStack_
+_020B3B74: .word mtxCacheBuffer_
+_020B3B78: .word mtxStack_
+_020B3B7C: .word mtxStack_ + 0x10
+_020B3B80: .word mtxStack_ + 0x14
+_020B3B84: .word mtxI_
+_020B3B88: .word currenVramTransferHandle_
+_020B3B8C: .word fxZStack_
+ arm_func_end DrawCellImpl_
+
+ arm_func_start RndCoreCBFuncAfterOBJ_
+RndCoreCBFuncAfterOBJ_: ; 0x020B3B90
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r0, _020B3C24 ; =pCurrentInstance_
+ mov r12, r1
+ ldr r0, [r0, #0x0]
+ mov r3, r2
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x44]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, _020B3C28 ; =bDonotUseSRTransform
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3C2C ; =stackPos_
+ ldreq r4, _020B3C30 ; =mtxStack_
+ ldreq lr, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r6, lr, r2, r4
+ beq _020B3C0C
+ ldr lr, _020B3C2C ; =stackPos_
+ mov r2, #0x18
+ ldr lr, [lr, #0x0]
+ ldr r4, _020B3C34 ; =mtxStack_ + 0x10
+ mul r5, lr, r2
+ ldr r2, _020B3C38 ; =mtxStack_ + 0x14
+ ldr r4, [r4, r5]
+ ldr r6, _020B3C3C ; =mtxI_
+ ldr r2, [r2, r5]
+ str r4, [r6, #0x10]
+ str r2, [r6, #0x14]
+_020B3C0C:
+ str r6, [sp, #0x0]
+ ldr lr, [r1, #0x44]
+ mov r2, r12
+ blx lr
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3C24: .word pCurrentInstance_
+_020B3C28: .word bDonotUseSRTransform
+_020B3C2C: .word stackPos_
+_020B3C30: .word mtxStack_
+_020B3C34: .word mtxStack_ + 0x10
+_020B3C38: .word mtxStack_ + 0x14
+_020B3C3C: .word mtxI_
+ arm_func_end RndCoreCBFuncAfterOBJ_
+
+ arm_func_start RndCoreCBFuncBeforeOBJ_
+RndCoreCBFuncBeforeOBJ_: ; 0x020B3C40
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r3, _020B3E2C ; =pCurrentInstance_
+ add r4, r0, #0x38
+ ldr r0, [r3, #0x0]
+ mov r6, r1
+ mov r5, r2
+ bl NNS_G2dGetRendererPaletteTbl
+ cmp r0, #0x0
+ beq _020B3C90
+ ldrh r1, [r4, #0x4]
+ and r1, r1, #0xf000
+ mov r1, r1, lsl #0x4
+ mov r1, r1, lsr #0x10
+ bl NNS_G2dGetPaletteTableValue
+ ldr r1, [r4, #0x4]
+ and r0, r0, #0xf
+ bic r1, r1, #0xf000
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3C90:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ cmp r0, #0x0
+ beq _020B3DA4
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x1
+ beq _020B3CC8
+ ldrh r0, [r1, #0x88]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xc00
+ and r0, r0, #0x3
+ orr r0, r1, r0, lsl #0xa
+ str r0, [r4, #0x4]
+_020B3CC8:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x2
+ beq _020B3CF4
+ ldrh r0, [r1, #0x8a]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xf000
+ and r0, r0, #0xf
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3CF4:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x10
+ beq _020B3D2C
+ ldr r2, [r4, #0x4]
+ ldrh r0, [r1, #0x94]
+ mov r1, r2, lsl #0x10
+ bic r2, r2, #0xf000
+ add r0, r0, r1, lsr #0x1c
+ and r0, r0, #0xf
+ and r0, r0, #0xf
+ orr r0, r2, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3D2C:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x4
+ beq _020B3D60
+ ldr r0, [r1, #0x90]
+ cmp r0, #0x0
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x1000
+ strne r0, [r4, #0x0]
+ ldreq r0, [r4, #0x0]
+ biceq r0, r0, #0x1000
+ streq r0, [r4, #0x0]
+_020B3D60:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x8
+ beq _020B3DA4
+ ldr r0, [r4, #0x0]
+ ldrh r2, [r4, #0x4]
+ ldr r1, [r1, #0x8c]
+ bic r0, r0, #0xc00
+ orr r0, r0, r1, lsl #0xa
+ str r0, [r4, #0x0]
+ ldrh r0, [r4, #0x4]
+ and r1, r2, #0xf000
+ mov r1, r1, asr #0xc
+ bic r0, r0, #0xf000
+ orr r0, r0, r1, lsl #0xc
+ strh r0, [r4, #0x4]
+_020B3DA4:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x40]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, _020B3E30 ; =bDonotUseSRTransform
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3E34 ; =stackPos_
+ ldreq r4, _020B3E38 ; =mtxStack_
+ ldreq r3, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r4, r3, r2, r4
+ beq _020B3E10
+ ldr r3, _020B3E34 ; =stackPos_
+ mov r2, #0x18
+ ldr r4, [r3, #0x0]
+ ldr r3, _020B3E3C ; =mtxStack_ + 0x10
+ mul r12, r4, r2
+ ldr r2, _020B3E40 ; =mtxStack_ + 0x14
+ ldr r3, [r3, r12]
+ ldr r4, _020B3E44 ; =mtxI_
+ ldr r2, [r2, r12]
+ str r3, [r4, #0x10]
+ str r2, [r4, #0x14]
+_020B3E10:
+ str r4, [sp, #0x0]
+ ldr r4, [r1, #0x40]
+ mov r2, r6
+ mov r3, r5
+ blx r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3E2C: .word pCurrentInstance_
+_020B3E30: .word bDonotUseSRTransform
+_020B3E34: .word stackPos_
+_020B3E38: .word mtxStack_
+_020B3E3C: .word mtxStack_ + 0x10
+_020B3E40: .word mtxStack_ + 0x14
+_020B3E44: .word mtxI_
+ arm_func_end RndCoreCBFuncBeforeOBJ_
+
+ arm_func_start RndCoreCBFuncAfterCell_
+RndCoreCBFuncAfterCell_: ; 0x020B3E48
+ stmdb sp!, {r4,lr}
+ ldr r0, _020B3EC4 ; =pCurrentInstance_
+ mov r2, r1
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r3, [r1, #0x3c]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r3, _020B3EC8 ; =bDonotUseSRTransform
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ ldreq r3, _020B3ECC ; =stackPos_
+ ldreq lr, _020B3ED0 ; =mtxStack_
+ ldreq r12, [r3, #0x0]
+ moveq r3, #0x18
+ mlaeq r3, r12, r3, lr
+ beq _020B3EB8
+ ldr ip, _020B3ECC ; =stackPos_
+ mov r3, #0x18
+ ldr r12, [r12, #0x0]
+ ldr lr, _020B3ED4 ; =mtxStack_ + 0x10
+ mul r4, r12, r3
+ ldr ip, _020B3ED8 ; =mtxStack_ + 0x14
+ ldr lr, [lr, r4]
+ ldr r3, _020B3EDC ; =mtxI_
+ ldr r12, [r12, r4]
+ str lr, [r3, #0x10]
+ str r12, [r3, #0x14]
+_020B3EB8:
+ ldr r12, [r1, #0x3c]
+ blx r12
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3EC4: .word pCurrentInstance_
+_020B3EC8: .word bDonotUseSRTransform
+_020B3ECC: .word stackPos_
+_020B3ED0: .word mtxStack_
+_020B3ED4: .word mtxStack_ + 0x10
+_020B3ED8: .word mtxStack_ + 0x14
+_020B3EDC: .word mtxI_
+ arm_func_end RndCoreCBFuncAfterCell_
+
+ arm_func_start RndCoreCBFuncBeforeCell_
+RndCoreCBFuncBeforeCell_: ; 0x020B3EE0
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020B3FF4 ; =pCurrentInstance_
+ mov r6, r0
+ ldr r0, [r2, #0x0]
+ mov r5, r1
+ ldr r4, [r0, #0x74]
+ ldr r0, [r4, #0x34]
+ cmp r0, #0x0
+ beq _020B3F7C
+ ldr r0, _020B3FF8 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =stackPos_
+ ldreq r1, _020B4000 ; =mtxStack_
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r1, r2, r0, r1
+ beq _020B3F54
+ ldr r1, _020B3FFC ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =mtxStack_ + 0x10
+ mul r3, r2, r0
+ ldr r0, _020B4008 ; =mtxStack_ + 0x14
+ ldr r2, [r1, r3]
+ ldr r1, _020B400C ; =mtxI_
+ ldr r0, [r0, r3]
+ str r2, [r1, #0x10]
+ str r0, [r1, #0x14]
+_020B3F54:
+ ldr r3, [r4, #0x34]
+ mov r0, r5
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r6, #0x30]
+ ldmeqia sp!, {r4-r6,pc}
+ mov r0, #0x1
+ str r0, [r6, #0x30]
+_020B3F7C:
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r0, _020B3FF8 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =stackPos_
+ ldreq r2, _020B4000 ; =mtxStack_
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r3, r1, r0, r2
+ beq _020B3FD8
+ ldr r1, _020B3FFC ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =mtxStack_ + 0x10
+ mul r6, r2, r0
+ ldr r0, _020B4008 ; =mtxStack_ + 0x14
+ ldr r1, [r1, r6]
+ ldr r3, _020B400C ; =mtxI_
+ ldr r0, [r0, r6]
+ str r1, [r3, #0x10]
+ str r0, [r3, #0x14]
+_020B3FD8:
+ ldr r0, _020B3FF4 ; =pCurrentInstance_
+ ldr r6, [r4, #0x38]
+ ldr r0, [r0, #0x0]
+ mov r1, r4
+ mov r2, r5
+ blx r6
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3FF4: .word pCurrentInstance_
+_020B3FF8: .word bDonotUseSRTransform
+_020B3FFC: .word stackPos_
+_020B4000: .word mtxStack_
+_020B4004: .word mtxStack_ + 0x10
+_020B4008: .word mtxStack_ + 0x14
+_020B400C: .word mtxI_
+ arm_func_end RndCoreCBFuncBeforeCell_
+
+ arm_func_start NNSi_G2dMCMStoreCurrentMtxToMtxCache
+NNSi_G2dMCMStoreCurrentMtxToMtxCache: ; 0x020B4010
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4154 ; =stackPos_
+ ldr r1, _020B4158 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r0, lsl #0x10
+ add r3, r1, r0, lsr #0xd
+ ldrh r0, [r3, #0x4]
+ cmp r0, #0x1
+ beq _020B4044
+ cmp r0, #0x2
+ movne r2, #0x0
+_020B4044:
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r0, _020B415C ; =currentMtxCachePos_
+ mov r2, #0x10
+ ldrh r4, [r0, #0x0]
+ cmp r4, #0x1f
+ addcc r1, r4, #0x1
+ strcch r1, [r0, #0x0]
+ ldr r0, _020B4160 ; =mtxCacheBuffer_
+ ldrh r5, [r3, #0x2]
+ add r0, r0, r4, lsl #0x5
+ add r1, r0, #0x10
+ mvn r0, #0x0
+ strh r4, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B4154 ; =stackPos_
+ ldr r1, _020B4164 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ mov r1, r0, lsl #0x10
+ cmp r2, #0x0
+ ldr r3, _020B4158 ; =mtxStateStack_
+ mov r1, r1, lsr #0xd
+ ldrh r1, [r3, r1]
+ ldr r3, _020B4160 ; =mtxCacheBuffer_
+ moveq r2, #0x18
+ add r1, r3, r1, lsl #0x5
+ ldreq r3, _020B4168 ; =mtxStackFor2DHW_
+ mlaeq r12, r0, r2, r3
+ beq _020B40E4
+ mov r2, #0x18
+ mul r3, r0, r2
+ ldr r2, _020B416C ; =mtxStack_ + 0x10
+ ldr r0, _020B4170 ; =mtxStack_ + 0x14
+ ldr r2, [r2, r3]
+ ldr ip, _020B4174 ; =mtxI_
+ ldr r0, [r0, r3]
+ str r2, [r12, #0x10]
+ str r0, [r12, #0x14]
+_020B40E4:
+ ldr r2, [r12, #0x0]
+ ldr r0, _020B4154 ; =stackPos_
+ str r2, [r1, #0x0]
+ ldr r2, [r12, #0x4]
+ str r2, [r1, #0x4]
+ ldr r2, [r12, #0x8]
+ str r2, [r1, #0x8]
+ ldr r2, [r12, #0xc]
+ str r2, [r1, #0xc]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ movs lr, r0, lsr #0x10
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r5,pc}
+ ldr r3, _020B4158 ; =mtxStateStack_
+ mov r0, #0x3
+_020B4124:
+ add r2, r3, lr, lsl #0x3
+ ldrh r1, [r2, #0x2]
+ mov r12, lr, lsl #0x3
+ cmp r5, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+ strh r0, [r2, #0x4]
+ strh r4, [r3, r12]
+ subs lr, lr, #0x1
+ bpl _020B4124
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4154: .word stackPos_
+_020B4158: .word mtxStateStack_
+_020B415C: .word currentMtxCachePos_
+_020B4160: .word mtxCacheBuffer_
+_020B4164: .word bDonotUseSRTransform
+_020B4168: .word mtxStackFor2DHW_
+_020B416C: .word mtxStack_ + 0x10
+_020B4170: .word mtxStack_ + 0x14
+_020B4174: .word mtxI_
+ arm_func_end NNSi_G2dMCMStoreCurrentMtxToMtxCache
+
+ arm_func_start NNSi_G2dIdentity
+NNSi_G2dIdentity: ; 0x020B4178
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4220 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B41B8
+ ldr r1, _020B4224 ; =stackPos_
+ mov r0, #0x18
+ ldr r12, [r1, #0x0]
+ ldr r1, _020B4228 ; =mtxStack_ + 0x10
+ mul r3, r12, r0
+ mov r2, #0x0
+ ldr r0, _020B422C ; =mtxStack_ + 0x14
+ str r2, [r1, r3]
+ str r2, [r0, r3]
+ b _020B420C
+_020B41B8:
+ ldr r0, _020B4224 ; =stackPos_
+ mov lr, #0x18
+ ldr r1, [r0, #0x0]
+ ldr r4, _020B4230 ; =mtxStack_
+ mul r3, r1, lr
+ mov r2, #0x1000
+ str r2, [r4, r3]
+ add r5, r4, r3
+ mov r1, #0x0
+ str r1, [r5, #0x4]
+ str r1, [r5, #0x8]
+ str r2, [r5, #0xc]
+ str r1, [r5, #0x10]
+ str r1, [r5, #0x14]
+ ldr r12, [r0, #0x0]
+ ldr r4, _020B4234 ; =mtxStackFor2DHW_
+ ldmia r5!, {r0-r3}
+ mla lr, r12, lr, r4
+ stmia lr!, {r0-r3}
+ ldmia r5, {r0-r1}
+ stmia lr, {r0-r1}
+_020B420C:
+ ldr r0, _020B4238 ; =fxZStack_
+ mov r1, #0x0
+ str r1, [r0, r12, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4220: .word bDonotUseSRTransform
+_020B4224: .word stackPos_
+_020B4228: .word mtxStack_ + 0x10
+_020B422C: .word mtxStack_ + 0x14
+_020B4230: .word mtxStack_
+_020B4234: .word mtxStackFor2DHW_
+_020B4238: .word fxZStack_
+ arm_func_end NNSi_G2dIdentity