summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_GFD_gfd_linkedlistt.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/NNS_GFD_gfd_linkedlistt.s')
-rw-r--r--arm9/asm/NNS_GFD_gfd_linkedlistt.s283
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