summaryrefslogtreecommitdiff
path: root/arm9/asm
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm')
-rw-r--r--arm9/asm/NNS_FND_allocator.s65
-rw-r--r--arm9/asm/NNS_FND_expheap.s583
-rw-r--r--arm9/asm/NNS_FND_expheap_s.s159
-rw-r--r--arm9/asm/NNS_FND_heapcommon.s112
-rw-r--r--arm9/asm/NNS_FND_list.s169
5 files changed, 159 insertions, 929 deletions
diff --git a/arm9/asm/NNS_FND_allocator.s b/arm9/asm/NNS_FND_allocator.s
deleted file mode 100644
index 537ce6a0..00000000
--- a/arm9/asm/NNS_FND_allocator.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .rodata
- ; static const in function
-
- .global sAllocatorFunc$7864
-sAllocatorFunc$7864: ; 0x020FF7CC
- .word AllocatorAllocForExpHeap
- .word AllocatorFreeForExpHeap
- .text
-
- arm_func_start NNS_FndInitAllocatorForExpHeap
-NNS_FndInitAllocatorForExpHeap: ; 0x020AE82C
- ldr ip, _020AE848 ; =sAllocatorFunc$7864
- mov r3, #0x0
- str r12, [r0, #0x0]
- str r1, [r0, #0x4]
- str r2, [r0, #0x8]
- str r3, [r0, #0xc]
- bx lr
- .balign 4
-_020AE848: .word sAllocatorFunc$7864
- arm_func_end NNS_FndInitAllocatorForExpHeap
-
- arm_func_start NNS_FndFreeToAllocator
-NNS_FndFreeToAllocator: ; 0x020AE84C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- ldr r2, [r2, #0x4]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndFreeToAllocator
-
- arm_func_start NNS_FndAllocFromAllocator
-NNS_FndAllocFromAllocator: ; 0x020AE868
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- ldr r2, [r2, #0x0]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndAllocFromAllocator
-
- arm_func_start AllocatorFreeForExpHeap
-AllocatorFreeForExpHeap: ; 0x020AE884
- ldr ip, _020AE890 ; =NNS_FndFreeToExpHeap
- ldr r0, [r0, #0x4]
- bx r12
- .balign 4
-_020AE890: .word NNS_FndFreeToExpHeap
- arm_func_end AllocatorFreeForExpHeap
-
- arm_func_start AllocatorAllocForExpHeap
-AllocatorAllocForExpHeap: ; 0x020AE894
- ldr ip, _020AE8A8 ; =NNS_FndAllocFromExpHeapEx
- mov r2, r0
- ldr r0, [r2, #0x4]
- ldr r2, [r2, #0x8]
- bx r12
- .balign 4
-_020AE8A8: .word NNS_FndAllocFromExpHeapEx
- arm_func_end AllocatorAllocForExpHeap
diff --git a/arm9/asm/NNS_FND_expheap.s b/arm9/asm/NNS_FND_expheap.s
deleted file mode 100644
index e94dba38..00000000
--- a/arm9/asm/NNS_FND_expheap.s
+++ /dev/null
@@ -1,583 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .extern NNSi_FndInitHeapHead
- .extern NNSi_FndFinalizeHeap
- .text
-
- arm_func_start NNS_FndGetSizeForMBlockExpHeap
-NNS_FndGetSizeForMBlockExpHeap: ; 0x020ADDC0
- ldr r0, [r0, #-0xc]
- bx lr
- arm_func_end NNS_FndGetSizeForMBlockExpHeap
-
- arm_func_start NNS_FndGetTotalFreeSizeForExpHeap
-NNS_FndGetTotalFreeSizeForExpHeap: ; 0x020ADDC8
- ldr r2, [r0, #0x24]
- mov r0, #0x0
- cmp r2, #0x0
- bxeq lr
-_020ADDD8:
- ldr r1, [r2, #0x4]
- ldr r2, [r2, #0xc]
- add r0, r0, r1
- cmp r2, #0x0
- bne _020ADDD8
- bx lr
- arm_func_end NNS_FndGetTotalFreeSizeForExpHeap
-
- arm_func_start NNS_FndFreeToExpHeap
-NNS_FndFreeToExpHeap: ; 0x020ADDF0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- sub r4, r1, #0x10
- add r5, r0, #0x24
- add r0, sp, #0x0
- mov r1, r4
- bl GetRegionOfMBlock
- mov r1, r4
- add r0, r5, #0x8
- bl RemoveMBlock
- add r1, sp, #0x0
- mov r0, r5
- bl RecycleRegion
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
- arm_func_end NNS_FndFreeToExpHeap
-
- arm_func_start NNS_FndResizeForMBlockExpHeap
-NNS_FndResizeForMBlockExpHeap: ; 0x020ADE2C
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x10
- mov r4, r1
- mov r10, r2
- sub r6, r4, #0x10
- add r1, r10, #0x3
- mov r5, r0
- ldr r8, [r6, #0x4]
- bic r10, r1, #0x3
- cmp r10, r8
- add r7, r5, #0x24
- addeq sp, sp, #0x10
- moveq r0, r10
- ldmeqia sp!, {r4-r10,pc}
- cmp r10, r8
- bls _020ADF60
- ldr r9, [r7, #0x0]
- add r0, r6, #0x10
- cmp r9, #0x0
- add r0, r8, r0
- beq _020ADE94
-_020ADE80:
- cmp r9, r0
- beq _020ADE94
- ldr r9, [r9, #0xc]
- cmp r9, #0x0
- bne _020ADE80
-_020ADE94:
- cmp r9, #0x0
- beq _020ADEB0
- ldr r0, [r9, #0x4]
- add r1, r8, #0x10
- add r0, r1, r0
- cmp r10, r0
- bls _020ADEBC
-_020ADEB0:
- add sp, sp, #0x10
- mov r0, #0x0
- ldmia sp!, {r4-r10,pc}
-_020ADEBC:
- add r0, sp, #0x0
- mov r1, r9
- bl GetRegionOfMBlock
- mov r0, r7
- mov r1, r9
- bl RemoveMBlock
- ldr r2, [sp, #0x4]
- add r3, r10, r4
- ldr r9, [sp, #0x0]
- sub r1, r2, r3
- str r3, [sp, #0x0]
- cmp r1, #0x10
- strcc r2, [sp, #0x0]
- mov r8, r0
- ldr r0, [sp, #0x0]
- sub r0, r0, r4
- str r0, [r6, #0x4]
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r0, r1, r0
- cmp r0, #0x10
- blo _020ADF30
- ldr r1, _020ADF9C ; =0x00004652
- add r0, sp, #0x0
- bl InitMBlock
- mov r1, r0
- mov r0, r7
- mov r2, r8
- bl InsertMBlock
-_020ADF30:
- ldr r0, [r5, #0x20]
- ldr r1, [sp, #0x0]
- and r0, r0, #0xff
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- sub r2, r1, r9
- ands r0, r0, #0x1
- beq _020ADF90
- mov r1, r9
- mov r0, #0x0
- bl MIi_CpuClear32
- b _020ADF90
-_020ADF60:
- add r0, r10, r4
- str r0, [sp, #0x8]
- ldr r1, [r6, #0x4]
- add r0, r6, #0x10
- add r0, r1, r0
- str r0, [sp, #0xc]
- add r1, sp, #0x8
- mov r0, r7
- str r10, [r6, #0x4]
- bl RecycleRegion
- cmp r0, #0x0
- streq r8, [r6, #0x4]
-_020ADF90:
- ldr r0, [r6, #0x4]
- add sp, sp, #0x10
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020ADF9C: .word 0x00004652
- arm_func_end NNS_FndResizeForMBlockExpHeap
-
- arm_func_start NNS_FndAllocFromExpHeapEx
-NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- moveq r1, #0x1
- add r1, r1, #0x3
- cmp r2, #0x0
- bic r1, r1, #0x3
- blt _020ADFCC
- bl AllocFromHead
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADFCC:
- rsb r2, r2, #0x0
- bl AllocFromTail
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndAllocFromExpHeapEx
-
- arm_func_start NNS_FndDestroyExpHeap
-NNS_FndDestroyExpHeap: ; 0x020ADFDC
- ldr ip, _020ADFE4 ; =NNSi_FndFinalizeHeap
- bx r12
- .balign 4
-_020ADFE4: .word NNSi_FndFinalizeHeap
- arm_func_end NNS_FndDestroyExpHeap
-
- arm_func_start NNS_FndCreateExpHeapEx
-NNS_FndCreateExpHeapEx: ; 0x020ADFE8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- add r1, r1, r0
- add r0, r0, #0x3
- bic r1, r1, #0x3
- bic r0, r0, #0x3
- cmp r0, r1
- bhi _020AE014
- sub r3, r1, r0
- cmp r3, #0x4c
- bhs _020AE020
-_020AE014:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {pc}
-_020AE020:
- bl InitExpHeap
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndCreateExpHeapEx
-
- arm_func_start RecycleRegion
-RecycleRegion:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r5, r1
- ldr r2, [r5, #0x0]
- ldr r1, [r5, #0x4]
- mov r6, r0
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- ldr r1, [r6, #0x0]
- mov r4, #0x0
- cmp r1, #0x0
- beq _020AE0A0
- ldr r0, [r5, #0x0]
-_020AE060:
- cmp r1, r0
- movcc r4, r1
- blo _020AE094
- ldr r0, [r5, #0x4]
- cmp r1, r0
- bne _020AE0A0
- ldr r2, [r1, #0x4]
- add r0, r1, #0x10
- add r2, r2, r0
- mov r0, r6
- str r2, [sp, #0x4]
- bl RemoveMBlock
- b _020AE0A0
-_020AE094:
- ldr r1, [r1, #0xc]
- cmp r1, #0x0
- bne _020AE060
-_020AE0A0:
- cmp r4, #0x0
- beq _020AE0D4
- ldr r2, [r4, #0x4]
- add r1, r4, #0x10
- ldr r0, [r5, #0x0]
- add r1, r2, r1
- cmp r1, r0
- bne _020AE0D4
- mov r0, r6
- mov r1, r4
- str r4, [sp, #0x0]
- bl RemoveMBlock
- mov r4, r0
-_020AE0D4:
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r0, r1, r0
- cmp r0, #0x10
- addcc sp, sp, #0x8
- movcc r0, #0x0
- ldmccia sp!, {r4-r6,pc}
- ldr r1, _020AE118 ; =0x00004652
- add r0, sp, #0x0
- bl InitMBlock
- mov r1, r0
- mov r0, r6
- mov r2, r4
- bl InsertMBlock
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020AE118: .word 0x00004652
- arm_func_end RecycleRegion
-
- local_arm_func_start AllocFromTail
-AllocFromTail: ; 0x020AE11C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- add r0, r0, #0x24
- ldrh r4, [r0, #0x12]
- mov r3, r1
- mvn lr, #0x0
- and r1, r4, #0x1
- mov r1, r1, lsl #0x10
- movs r1, r1, lsr #0x10
- moveq r5, #0x1
- mov r1, #0x0
- ldr r4, [r0, #0x4]
- movne r5, #0x0
- mov r12, r1
- cmp r4, #0x0
- beq _020AE1B0
- sub r2, r2, #0x1
- mvn r2, r2
-_020AE164:
- ldr r8, [r4, #0x4]
- add r9, r4, #0x10
- add r6, r8, r9
- sub r6, r6, r3
- and r7, r2, r6
- subs r6, r7, r9
- bmi _020AE1A4
- cmp lr, r8
- bls _020AE1A4
- mov r1, r4
- mov lr, r8
- mov r12, r7
- cmp r5, #0x0
- bne _020AE1B0
- cmp r8, r3
- beq _020AE1B0
-_020AE1A4:
- ldr r4, [r4, #0x8]
- cmp r4, #0x0
- bne _020AE164
-_020AE1B0:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r4, #0x1
- mov r2, r12
- str r4, [sp, #0x0]
- bl AllocUsedBlockFromFreeBlock
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- arm_func_end AllocFromTail
-
- local_arm_func_start AllocFromHead
-AllocFromHead: ; 0x020AE1D8
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- add r0, r0, #0x24
- ldrh r4, [r0, #0x12]
- mov r3, r1
- ldr r5, [r0, #0x0]
- and r1, r4, #0x1
- mov r1, r1, lsl #0x10
- movs r1, r1, lsr #0x10
- moveq r6, #0x1
- mov r1, #0x0
- movne r6, #0x0
- mov lr, r1
- cmp r5, #0x0
- mvn r4, #0x0
- beq _020AE270
- sub r12, r2, #0x1
- mvn r2, r12
-_020AE220:
- add r8, r5, #0x10
- add r7, r12, r8
- and r9, r2, r7
- sub r7, r9, r8
- ldr r8, [r5, #0x4]
- add r7, r3, r7
- cmp r8, r7
- blo _020AE264
- cmp r4, r8
- bls _020AE264
- mov r1, r5
- mov r4, r8
- mov lr, r9
- cmp r6, #0x0
- bne _020AE270
- cmp r8, r3
- beq _020AE270
-_020AE264:
- ldr r5, [r5, #0xc]
- cmp r5, #0x0
- bne _020AE220
-_020AE270:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r4, #0x0
- mov r2, lr
- str r4, [sp, #0x0]
- bl AllocUsedBlockFromFreeBlock
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- arm_func_end AllocFromHead
-
- arm_func_start AllocUsedBlockFromFreeBlock
-AllocUsedBlockFromFreeBlock: ; 0x020AE298
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x18
- mov r7, r0
- add r0, sp, #0x0
- mov r8, r1
- mov r6, r2
- mov r5, r3
- bl GetRegionOfMBlock
- ldr r3, [sp, #0x4]
- sub r4, r6, #0x10
- add r2, r5, r6
- mov r0, r7
- mov r1, r8
- str r4, [sp, #0x4]
- str r3, [sp, #0xc]
- str r2, [sp, #0x8]
- bl RemoveMBlock
- ldr r2, [sp, #0x0]
- ldr r1, [sp, #0x4]
- mov r5, r0
- sub r0, r1, r2
- cmp r0, #0x10
- strcc r2, [sp, #0x4]
- blo _020AE318
- ldr r1, _020AE418 ; =0x00004652
- add r0, sp, #0x0
- bl InitMBlock
- mov r1, r0
- mov r0, r7
- mov r2, r5
- bl InsertMBlock
- mov r5, r0
-_020AE318:
- ldr r1, [sp, #0xc]
- ldr r0, [sp, #0x8]
- sub r0, r1, r0
- cmp r0, #0x10
- strcc r1, [sp, #0x8]
- blo _020AE34C
- ldr r1, _020AE418 ; =0x00004652
- add r0, sp, #0x8
- bl InitMBlock
- mov r1, r0
- mov r0, r7
- mov r2, r5
- bl InsertMBlock
-_020AE34C:
- ldr r0, [r7, #-0x4]
- ldr r1, [sp, #0x4]
- and r0, r0, #0xff
- mov r0, r0, lsl #0x10
- ldr r2, [sp, #0x8]
- mov r0, r0, lsr #0x10
- sub r2, r2, r1
- ands r0, r0, #0x1
- beq _020AE378
- mov r0, #0x0
- bl MIi_CpuClear32
-_020AE378:
- ldr r2, [sp, #0x8]
- ldr r1, _020AE41C ; =0x00005544
- add r0, sp, #0x10
- str r4, [sp, #0x10]
- str r2, [sp, #0x14]
- bl InitMBlock
- mov r1, r0
- ldrh r3, [r1, #0x2]
- ldrh r2, [sp, #0x30]
- add r0, r7, #0x8
- bic r3, r3, #0x8000
- strh r3, [r1, #0x2]
- ldrh r3, [r1, #0x2]
- and r2, r2, #0x1
- orr r2, r3, r2, lsl #0xf
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- ldr r3, [sp, #0x4]
- bic r2, r2, #0x7f00
- strh r2, [r1, #0x2]
- sub r2, r1, r3
- mov r2, r2, lsl #0x10
- mov r2, r2, lsr #0x10
- ldrh r3, [r1, #0x2]
- and r2, r2, #0x7f
- orr r2, r3, r2, lsl #0x8
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- ldrh r3, [r7, #0x10]
- bic r2, r2, #0xff
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- and r3, r3, #0xff
- orr r2, r2, r3
- strh r2, [r1, #0x2]
- ldr r2, [r7, #0xc]
- bl InsertMBlock
- mov r0, r6
- add sp, sp, #0x18
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020AE418: .word 0x00004652
-_020AE41C: .word 0x00005544
- arm_func_end AllocUsedBlockFromFreeBlock
-
- arm_func_start InitExpHeap
-InitExpHeap: ; 0x020AE420
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- mov r3, r1
- add r4, r5, #0x24
- str r2, [sp, #0x0]
- ldr r1, _020AE498 ; =0x45585048
- add r2, r4, #0x14
- bl NNSi_FndInitHeapHead
- mov r0, #0x0
- strh r0, [r4, #0x10]
- strh r0, [r4, #0x12]
- ldrh r2, [r4, #0x12]
- ldr r1, _020AE49C ; =0x00004652
- add r0, sp, #0x4
- bic r2, r2, #0x1
- strh r2, [r4, #0x12]
- ldr r2, [r5, #0x18]
- str r2, [sp, #0x4]
- ldr r2, [r5, #0x1c]
- str r2, [sp, #0x8]
- bl InitMBlock
- str r0, [r5, #0x24]
- str r0, [r4, #0x4]
- mov r1, #0x0
- str r1, [r4, #0x8]
- mov r0, r5
- str r1, [r4, #0xc]
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AE498: .word 0x45585048
-_020AE49C: .word 0x00004652
- arm_func_end InitExpHeap
-
- arm_func_start InitMBlock
-InitMBlock: ; 0x020AE4A0
- ldr r3, [r0, #0x0]
- mov r2, #0x0
- strh r1, [r3, #0x0]
- strh r2, [r3, #0x2]
- ldr r1, [r0, #0x4]
- add r0, r3, #0x10
- sub r0, r1, r0
- str r0, [r3, #0x4]
- str r2, [r3, #0x8]
- mov r0, r3
- str r2, [r3, #0xc]
- bx lr
- arm_func_end InitMBlock
-
- arm_func_start InsertMBlock
-InsertMBlock: ; 0x020AE4D0
- str r2, [r1, #0x8]
- cmp r2, #0x0
- ldrne r3, [r2, #0xc]
- strne r1, [r2, #0xc]
- ldreq r3, [r0, #0x0]
- streq r1, [r0, #0x0]
- str r3, [r1, #0xc]
- cmp r3, #0x0
- strne r1, [r3, #0x8]
- streq r1, [r0, #0x4]
- mov r0, r1
- bx lr
- arm_func_end InsertMBlock
-
- arm_func_start RemoveMBlock
-RemoveMBlock: ; 0x020AE500
- ldr r2, [r1, #0x8]
- ldr r1, [r1, #0xc]
- cmp r2, #0x0
- strne r1, [r2, #0xc]
- streq r1, [r0, #0x0]
- cmp r1, #0x0
- strne r2, [r1, #0x8]
- streq r2, [r0, #0x4]
- mov r0, r2
- bx lr
- arm_func_end RemoveMBlock
-
- arm_func_start GetRegionOfMBlock
-GetRegionOfMBlock: ; 0x020AE528
- ldrh r2, [r1, #0x2]
- add r3, r1, #0x10
- mov r2, r2, asr #0x8
- and r2, r2, #0x7f
- mov r2, r2, lsl #0x10
- sub r2, r1, r2, lsr #0x10
- str r2, [r0, #0x0]
- ldr r1, [r1, #0x4]
- add r1, r1, r3
- str r1, [r0, #0x4]
- bx lr
- arm_func_end GetRegionOfMBlock
diff --git a/arm9/asm/NNS_FND_expheap_s.s b/arm9/asm/NNS_FND_expheap_s.s
new file mode 100644
index 00000000..d4d958db
--- /dev/null
+++ b/arm9/asm/NNS_FND_expheap_s.s
@@ -0,0 +1,159 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .extern NNSi_FndInitHeapHead
+ .extern NNSi_FndFinalizeHeap
+ .extern GetRegionOfMBlock
+ .extern RemoveMBlock
+ .extern InsertMBlock
+ .extern InitMBlock
+ .extern InitExpHeap
+ .extern AllocUsedBlockFromFreeBlock
+ .extern AllocFromHead
+ .extern AllocFromTail
+ .extern RecycleRegion
+ .text
+
+ arm_func_start NNS_FndGetSizeForMBlockExpHeap
+NNS_FndGetSizeForMBlockExpHeap: ; 0x020ADDC0
+ ldr r0, [r0, #-0xc]
+ bx lr
+ arm_func_end NNS_FndGetSizeForMBlockExpHeap
+
+ arm_func_start NNS_FndGetTotalFreeSizeForExpHeap
+NNS_FndGetTotalFreeSizeForExpHeap: ; 0x020ADDC8
+ ldr r2, [r0, #0x24]
+ mov r0, #0x0
+ cmp r2, #0x0
+ bxeq lr
+_020ADDD8:
+ ldr r1, [r2, #0x4]
+ ldr r2, [r2, #0xc]
+ add r0, r0, r1
+ cmp r2, #0x0
+ bne _020ADDD8
+ bx lr
+ arm_func_end NNS_FndGetTotalFreeSizeForExpHeap
+
+ arm_func_start NNS_FndFreeToExpHeap
+NNS_FndFreeToExpHeap: ; 0x020ADDF0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ sub r4, r1, #0x10
+ add r5, r0, #0x24
+ add r0, sp, #0x0
+ mov r1, r4
+ bl GetRegionOfMBlock
+ mov r1, r4
+ add r0, r5, #0x8
+ bl RemoveMBlock
+ add r1, sp, #0x0
+ mov r0, r5
+ bl RecycleRegion
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_FndFreeToExpHeap
+
+ arm_func_start NNS_FndResizeForMBlockExpHeap
+NNS_FndResizeForMBlockExpHeap: ; 0x020ADE2C
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x10
+ mov r4, r1
+ mov r10, r2
+ sub r6, r4, #0x10
+ add r1, r10, #0x3
+ mov r5, r0
+ ldr r8, [r6, #0x4]
+ bic r10, r1, #0x3
+ cmp r10, r8
+ add r7, r5, #0x24
+ addeq sp, sp, #0x10
+ moveq r0, r10
+ ldmeqia sp!, {r4-r10,pc}
+ cmp r10, r8
+ bls _020ADF60
+ ldr r9, [r7, #0x0]
+ add r0, r6, #0x10
+ cmp r9, #0x0
+ add r0, r8, r0
+ beq _020ADE94
+_020ADE80:
+ cmp r9, r0
+ beq _020ADE94
+ ldr r9, [r9, #0xc]
+ cmp r9, #0x0
+ bne _020ADE80
+_020ADE94:
+ cmp r9, #0x0
+ beq _020ADEB0
+ ldr r0, [r9, #0x4]
+ add r1, r8, #0x10
+ add r0, r1, r0
+ cmp r10, r0
+ bls _020ADEBC
+_020ADEB0:
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r10,pc}
+_020ADEBC:
+ add r0, sp, #0x0
+ mov r1, r9
+ bl GetRegionOfMBlock
+ mov r0, r7
+ mov r1, r9
+ bl RemoveMBlock
+ ldr r2, [sp, #0x4]
+ add r3, r10, r4
+ ldr r9, [sp, #0x0]
+ sub r1, r2, r3
+ str r3, [sp, #0x0]
+ cmp r1, #0x10
+ strcc r2, [sp, #0x0]
+ mov r8, r0
+ ldr r0, [sp, #0x0]
+ sub r0, r0, r4
+ str r0, [r6, #0x4]
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ blo _020ADF30
+ ldr r1, _020ADF9C ; =0x00004652
+ add r0, sp, #0x0
+ bl InitMBlock
+ mov r1, r0
+ mov r0, r7
+ mov r2, r8
+ bl InsertMBlock
+_020ADF30:
+ ldr r0, [r5, #0x20]
+ ldr r1, [sp, #0x0]
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ sub r2, r1, r9
+ ands r0, r0, #0x1
+ beq _020ADF90
+ mov r1, r9
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ b _020ADF90
+_020ADF60:
+ add r0, r10, r4
+ str r0, [sp, #0x8]
+ ldr r1, [r6, #0x4]
+ add r0, r6, #0x10
+ add r0, r1, r0
+ str r0, [sp, #0xc]
+ add r1, sp, #0x8
+ mov r0, r7
+ str r10, [r6, #0x4]
+ bl RecycleRegion
+ cmp r0, #0x0
+ streq r8, [r6, #0x4]
+_020ADF90:
+ ldr r0, [r6, #0x4]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020ADF9C: .word 0x00004652
+ arm_func_end NNS_FndResizeForMBlockExpHeap
diff --git a/arm9/asm/NNS_FND_heapcommon.s b/arm9/asm/NNS_FND_heapcommon.s
deleted file mode 100644
index ca3108d2..00000000
--- a/arm9/asm/NNS_FND_heapcommon.s
+++ /dev/null
@@ -1,112 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .bss
-
- .global sRootListInitialized
-sRootListInitialized: ; 0x021CCD38
- .space 0x4
-
- .global sRootList
-sRootList: ; 0x021CCD3C
- .space 0xc
- .text
-
- arm_func_start NNSi_FndFinalizeHeap
-NNSi_FndFinalizeHeap: ; 0x020ADC8C
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FindListContainHeap
- mov r1, r4
- bl NNS_FndRemoveListObject
- ldmia sp!, {r4,pc}
- arm_func_end NNSi_FndFinalizeHeap
-
- arm_func_start NNSi_FndInitHeapHead
-NNSi_FndInitHeapHead:
- stmdb sp!, {r4,lr}
- mov r4, r0
- str r1, [r4, #0x0]
- str r2, [r4, #0x18]
- str r3, [r4, #0x1c]
- mov r0, #0x0
- str r0, [r4, #0x20]
- ldr r1, [r4, #0x20]
- ldrh r0, [sp, #0x8]
- bic r1, r1, #0xff
- str r1, [r4, #0x20]
- ldr r1, [r4, #0x20]
- and r0, r0, #0xff
- orr r2, r1, r0
- add r0, r4, #0xc
- mov r1, #0x4
- str r2, [r4, #0x20]
- bl NNS_FndInitList
- ldr r0, _020ADD28 ; =sRootListInitialized
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020ADD14
- ldr r0, _020ADD2C ; =sRootList
- mov r1, #0x4
- bl NNS_FndInitList
- ldr r0, _020ADD28 ; =sRootListInitialized
- mov r1, #0x1
- str r1, [r0, #0x0]
-_020ADD14:
- mov r0, r4
- bl FindListContainHeap
- mov r1, r4
- bl NNS_FndAppendListObject
- ldmia sp!, {r4,pc}
- .balign 4
-_020ADD28: .word sRootListInitialized
-_020ADD2C: .word sRootList
- arm_func_end NNSi_FndInitHeapHead
-
- arm_func_start FindListContainHeap
-FindListContainHeap: ; 0x020ADD30
- stmdb sp!, {r4,lr}
- ldr r4, _020ADD54 ; =sRootList
- mov r1, r0
- mov r0, r4
- bl FindContainHeap
- cmp r0, #0x0
- addne r4, r0, #0xc
- mov r0, r4
- ldmia sp!, {r4,pc}
- .balign 4
-_020ADD54: .word sRootList
- arm_func_end FindListContainHeap
-
- arm_func_start FindContainHeap
-FindContainHeap:
- stmdb sp!, {r4-r6,lr}
- mov r5, r1
- mov r1, #0x0
- mov r6, r0
- bl NNS_FndGetNextListObject
- movs r4, r0
- beq _020ADDB8
-_020ADD74:
- ldr r0, [r4, #0x18]
- cmp r0, r5
- bhi _020ADDA4
- ldr r0, [r4, #0x1c]
- cmp r5, r0
- bhs _020ADDA4
- mov r1, r5
- add r0, r4, #0xc
- bl FindContainHeap
- cmp r0, #0x0
- moveq r0, r4
- ldmia sp!, {r4-r6,pc}
-_020ADDA4:
- mov r0, r6
- mov r1, r4
- bl NNS_FndGetNextListObject
- movs r4, r0
- bne _020ADD74
-_020ADDB8:
- mov r0, #0x0
- ldmia sp!, {r4-r6,pc}
- arm_func_end FindContainHeap
diff --git a/arm9/asm/NNS_FND_list.s b/arm9/asm/NNS_FND_list.s
deleted file mode 100644
index 21999c11..00000000
--- a/arm9/asm/NNS_FND_list.s
+++ /dev/null
@@ -1,169 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .text
-
- arm_func_start NNS_FndGetPrevListObject
-NNS_FndGetPrevListObject: ; 0x020ADA84
- cmp r1, #0x0
- ldreq r0, [r0, #0x4]
- ldrneh r0, [r0, #0xa]
- ldrne r0, [r1, r0]
- bx lr
- arm_func_end NNS_FndGetPrevListObject
-
- arm_func_start NNS_FndGetNextListObject
-NNS_FndGetNextListObject: ; 0x020ADA98
- cmp r1, #0x0
- ldreq r0, [r0, #0x0]
- ldrneh r0, [r0, #0xa]
- addne r0, r1, r0
- ldrne r0, [r0, #0x4]
- bx lr
- arm_func_end NNS_FndGetNextListObject
-
- arm_func_start NNS_FndRemoveListObject
-NNS_FndRemoveListObject: ; 0x020ADAB0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldrh r12, [r0, #0xa]
- ldr r3, [r1, r12]
- add lr, r1, r12
- cmp r3, #0x0
- ldreq r1, [lr, #0x4]
- streq r1, [r0, #0x0]
- ldrne r2, [lr, #0x4]
- addne r1, r3, r12
- strne r2, [r1, #0x4]
- ldr r3, [lr, #0x4]
- cmp r3, #0x0
- ldreq r1, [lr, #0x0]
- streq r1, [r0, #0x4]
- ldrneh r1, [r0, #0xa]
- ldrne r2, [lr, #0x0]
- strne r2, [r3, r1]
- mov r1, #0x0
- str r1, [lr, #0x0]
- str r1, [lr, #0x4]
- ldrh r1, [r0, #0x8]
- sub r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndRemoveListObject
-
- arm_func_start NNS_FndInsertListObject
-NNS_FndInsertListObject: ; 0x020ADB18
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- bne _020ADB38
- mov r1, r2
- bl NNS_FndAppendListObject
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADB38:
- ldr r3, [r0, #0x0]
- cmp r1, r3
- bne _020ADB54
- mov r1, r2
- bl NNS_FndPrependListObject
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADB54:
- ldrh lr, [r0, #0xa]
- ldr r3, [r1, lr]
- add r12, r2, lr
- str r3, [r2, lr]
- str r1, [r12, #0x4]
- add r3, r3, lr
- str r2, [r3, #0x4]
- ldrh r3, [r0, #0xa]
- str r2, [r1, r3]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndInsertListObject
-
- arm_func_start NNS_FndPrependListObject
-NNS_FndPrependListObject: ; 0x020ADB8C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- bne _020ADBAC
- bl SetFirstObject
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADBAC:
- ldrh r3, [r0, #0xa]
- mov r2, #0x0
- str r2, [r1, r3]
- ldr r2, [r0, #0x0]
- add r3, r1, r3
- str r2, [r3, #0x4]
- ldrh r2, [r0, #0xa]
- ldr r3, [r0, #0x0]
- str r1, [r3, r2]
- str r1, [r0, #0x0]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndPrependListObject
-
- arm_func_start NNS_FndAppendListObject
-NNS_FndAppendListObject: ; 0x020ADBE8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- bne _020ADC08
- bl SetFirstObject
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADC08:
- ldrh r12, [r0, #0xa]
- ldr r3, [r0, #0x4]
- mov r2, #0x0
- str r3, [r1, r12]
- add r3, r1, r12
- str r2, [r3, #0x4]
- ldrh r2, [r0, #0xa]
- ldr r3, [r0, #0x4]
- add r2, r3, r2
- str r1, [r2, #0x4]
- str r1, [r0, #0x4]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- arm_func_end NNS_FndAppendListObject
-
- arm_func_start SetFirstObject
-SetFirstObject: ; 0x020ADC48
- ldrh r3, [r0, #0xa]
- mov r2, #0x0
- add r12, r1, r3
- str r2, [r12, #0x4]
- str r2, [r1, r3]
- str r1, [r0, #0x0]
- str r1, [r0, #0x4]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- bx lr
- arm_func_end SetFirstObject
-
- arm_func_start NNS_FndInitList
-NNS_FndInitList: ; 0x020ADC74
- mov r2, #0x0
- str r2, [r0, #0x0]
- str r2, [r0, #0x4]
- strh r2, [r0, #0x8]
- strh r1, [r0, #0xa]
- bx lr
- arm_func_end NNS_FndInitList