diff options
Diffstat (limited to 'arm9/asm/NNS_GFD_gfd_linkedlistt.s')
-rw-r--r-- | arm9/asm/NNS_GFD_gfd_linkedlistt.s | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/arm9/asm/NNS_GFD_gfd_linkedlistt.s b/arm9/asm/NNS_GFD_gfd_linkedlistt.s new file mode 100644 index 00000000..6522bf3b --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_linkedlistt.s @@ -0,0 +1,283 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global __LOCAL_LABEL__$7929 +__LOCAL_LABEL__$7929: ; 0x020FF864 + .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .bss + +mgr_: ; 0x021CCD6C + .space 0x1C + + .section .text + + arm_func_start NNS_GfdResetLnkTexVramState +NNS_GfdResetLnkTexVramState: ; 0x020AF6A4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x30 + ldr r6, _020AF884 ; =__LOCAL_LABEL__$7929 + add r5, sp, #0x0 + ldmia r6!, {r0-r3} + mov r12, r5 + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldr r4, _020AF888 ; =mgr_ + ldmia r6, {r0-r3} + stmia r5, {r0-r3} + ldr lr, [r4, #0x10] + ldr r1, [r4, #0xc] + add r0, lr, lr, lsr #0x1 + mov r4, lr, lsr #0x1 + sub r0, r1, r0 + mov r3, #0x0 +_020AF6EC: + cmp r3, #0x0 + beq _020AF6FC + cmp r3, #0x2 + bne _020AF734 +_020AF6FC: + ldr r2, [r12, #0x0] + cmp r2, #0x0 + beq _020AF734 + cmp lr, #0x0 + beq _020AF734 + ldr r1, [r12, #0x8] + cmp r2, lr + movhi r2, lr + add r1, r1, r2 + str r1, [r12, #0x8] + ldr r1, [r12, #0x0] + sub lr, lr, r2 + sub r1, r1, r2 + str r1, [r12, #0x0] +_020AF734: + add r3, r3, #0x1 + cmp r3, #0x4 + add r12, r12, #0xc + blo _020AF6EC + ldr r1, [sp, #0xc] + add r5, sp, #0x0 + sub r1, r1, r4 + str r1, [sp, #0xc] + mov r3, #0x0 +_020AF758: + ldr r2, [r5, #0x0] + cmp r2, #0x0 + beq _020AF790 + cmp r0, #0x0 + beq _020AF790 + ldr r1, [r5, #0x4] + cmp r2, r0 + movhi r2, r0 + add r1, r1, r2 + str r1, [r5, #0x4] + ldr r1, [r5, #0x0] + sub r0, r0, r2 + sub r1, r1, r2 + str r1, [r5, #0x0] +_020AF790: + add r3, r3, #0x1 + cmp r3, #0x4 + add r5, r5, #0xc + blo _020AF758 + ldr r0, _020AF888 ; =mgr_ + bl NNSi_GfdInitLnkVramMan + ldr r0, _020AF88C ; =mgr_ + 0x4 + bl NNSi_GfdInitLnkVramMan + ldr r0, _020AF888 ; =mgr_ + ldr r1, [r0, #0x18] + ldr r0, [r0, #0x14] + mov r1, r1, lsr #0x4 + bl NNSi_GfdInitLnkVramBlockPool + ldr r3, [sp, #0x8] + ldr r1, _020AF888 ; =mgr_ + cmp r3, #0x0 + str r0, [r1, #0x8] + beq _020AF7E8 + ldr r0, _020AF88C ; =mgr_ + 0x4 + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x0 + bl NNSi_GfdAddNewFreeBlock +_020AF7E8: + ldr r3, [sp, #0x4] + ldr r2, [sp, #0x8] + cmp r3, #0x0 + beq _020AF804 + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + bl NNSi_GfdAddNewFreeBlock +_020AF804: + ldr r3, [sp, #0x20] + cmp r3, #0x0 + beq _020AF820 + ldr r0, _020AF88C ; =mgr_ + 0x4 + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x40000 + bl NNSi_GfdAddNewFreeBlock +_020AF820: + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x20] + cmp r3, #0x0 + add r2, r0, #0x40000 + beq _020AF840 + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + bl NNSi_GfdAddNewFreeBlock +_020AF840: + ldr r3, [sp, #0x28] + cmp r3, #0x0 + beq _020AF85C + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x60000 + bl NNSi_GfdAddNewFreeBlock +_020AF85C: + ldr r3, [sp, #0x10] + cmp r3, #0x0 + addeq sp, sp, #0x30 + ldmeqia sp!, {r4-r6,pc} + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + add r2, r4, #0x20000 + bl NNSi_GfdAddNewFreeBlock + add sp, sp, #0x30 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AF884: .word __LOCAL_LABEL__$7929 +_020AF888: .word mgr_ +_020AF88C: .word mgr_ + 0x4 +_020AF890: .word mgr_ + 0x8 + arm_func_end NNS_GfdResetLnkTexVramState + + arm_func_start NNS_GfdFreeLnkTexVram +NNS_GfdFreeLnkTexVram: ; 0x020AF894 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020AF908 ; =0x7FFF0000 + ldr r1, _020AF90C ; =0x0000FFFF + and r2, r0, r2 + and r3, r0, r1 + mov r1, r2, lsr #0x10 + and r0, r0, #0x80000000 + mov r2, r3, lsl #0x3 + movs r3, r1, lsl #0x4 + mov r0, r0, lsr #0x1f + beq _020AF8FC + cmp r0, #0x0 + beq _020AF8DC + ldr r0, _020AF910 ; =mgr_ + 0x4 + ldr r1, _020AF914 ; =mgr_ + 0x8 + bl NNSi_GfdFreeLnkVram + b _020AF8E8 +_020AF8DC: + ldr r0, _020AF918 ; =mgr_ + ldr r1, _020AF914 ; =mgr_ + 0x8 + bl NNSi_GfdFreeLnkVram +_020AF8E8: + cmp r0, #0x0 + movne r0, #0x0 + add sp, sp, #0x4 + moveq r0, #0x1 + ldmia sp!, {pc} +_020AF8FC: + mov r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AF908: .word 0x7FFF0000 +_020AF90C: .word 0x0000FFFF +_020AF910: .word mgr_ + 0x4 +_020AF914: .word mgr_ + 0x8 +_020AF918: .word mgr_ + arm_func_end NNS_GfdFreeLnkTexVram + + arm_func_start NNS_GfdAllocLnkTexVram +NNS_GfdAllocLnkTexVram: ; 0x020AF91C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + moveq r5, #0x10 + addne r0, r0, #0xf + bicne r5, r0, #0xf + ldr r0, _020AF9B0 ; =0x0007FFF0 + mov r4, r1 + cmp r5, r0 + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,pc} + cmp r4, #0x0 + beq _020AF96C + ldr r0, _020AF9B4 ; =mgr_ + 0x4 + ldr r1, _020AF9B8 ; =mgr_ + 0x8 + add r2, sp, #0x0 + mov r3, r5 + bl NNSi_GfdAllocLnkVram + b _020AF980 +_020AF96C: + ldr r0, _020AF9BC ; =mgr_ + ldr r1, _020AF9B8 ; =mgr_ + 0x8 + add r2, sp, #0x0 + mov r3, r5 + bl NNSi_GfdAllocLnkVram +_020AF980: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + ldr r1, [sp, #0x0] + ldr r0, _020AF9C0 ; =0x0000FFFF + mov r2, r5, lsr #0x4 + and r0, r0, r1, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + orr r0, r0, r4, lsl #0x1f + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AF9B0: .word 0x0007FFF0 +_020AF9B4: .word mgr_ + 0x4 +_020AF9B8: .word mgr_ + 0x8 +_020AF9BC: .word mgr_ +_020AF9C0: .word 0x0000FFFF + arm_func_end NNS_GfdAllocLnkTexVram + + arm_func_start NNS_GfdInitLnkTexVramManager +NNS_GfdInitLnkTexVramManager: ; 0x020AF9C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020AFA14 ; =mgr_ + str r0, [r12, #0xc] + str r1, [r12, #0x10] + str r2, [r12, #0x14] + str r3, [r12, #0x18] + bl NNS_GfdResetLnkTexVramState + ldr r0, [sp, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r3, _020AFA18 ; =NNS_GfdAllocLnkTexVram + ldr r1, _020AFA1C ; =NNS_GfdDefaultFuncAllocTexVram + ldr r2, _020AFA20 ; =NNS_GfdFreeLnkTexVram + ldr r0, _020AFA24 ; =NNS_GfdDefaultFuncFreeTexVram + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFA14: .word mgr_ +_020AFA18: .word NNS_GfdAllocLnkTexVram +_020AFA1C: .word NNS_GfdDefaultFuncAllocTexVram +_020AFA20: .word NNS_GfdFreeLnkTexVram +_020AFA24: .word NNS_GfdDefaultFuncFreeTexVram + arm_func_end NNS_GfdInitLnkTexVramManager + + arm_func_start NNS_GfdGetLnkTexVramManagerWorkSize +NNS_GfdGetLnkTexVramManagerWorkSize: ; 0x020AFA28 + mov r0, r0, lsl #0x4 + bx lr + arm_func_end NNS_GfdGetLnkTexVramManagerWorkSize |