diff options
Diffstat (limited to 'arm9/asm/NNS_G2D_g2d_renderer.s')
-rw-r--r-- | arm9/asm/NNS_G2D_g2d_renderer.s | 1984 |
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 |