2021-12-19 19:05:40 +00:00
|
|
|
#include "asm/constants/gba_constants.inc"
|
|
|
|
#include "asm/macros.inc"
|
2021-05-23 21:19:35 +00:00
|
|
|
|
|
|
|
.syntax unified
|
|
|
|
|
|
|
|
.text
|
|
|
|
|
|
|
|
thumb_func_start DoCreateSubHeap
|
|
|
|
DoCreateSubHeap:
|
|
|
|
push {r4,lr}
|
|
|
|
sub sp, 0x8
|
|
|
|
adds r2, r1, 0
|
|
|
|
ldr r4, [r0]
|
|
|
|
adds r1, r4, 0
|
|
|
|
adds r1, 0x1C
|
|
|
|
str r1, [sp]
|
|
|
|
ldr r0, [r0, 0x4]
|
|
|
|
subs r0, 0x1C
|
|
|
|
str r0, [sp, 0x4]
|
|
|
|
adds r0, r4, 0
|
|
|
|
mov r1, sp
|
|
|
|
bl InitSubHeap
|
|
|
|
adds r0, r4, 0
|
|
|
|
add sp, 0x8
|
|
|
|
pop {r4}
|
|
|
|
pop {r1}
|
|
|
|
bx r1
|
|
|
|
thumb_func_end DoCreateSubHeap
|
|
|
|
|
|
|
|
thumb_func_start xxx_unused_memory_free
|
|
|
|
xxx_unused_memory_free:
|
|
|
|
push {r4-r7,lr}
|
|
|
|
adds r4, r0, 0
|
|
|
|
cmp r4, 0
|
|
|
|
beq _08003504
|
|
|
|
movs r1, 0
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
cmp r0, 0x1
|
|
|
|
bne _080034A2
|
|
|
|
ldr r0, [r4, 0x8]
|
|
|
|
ldr r0, [r0, 0x4]
|
|
|
|
cmp r0, 0
|
|
|
|
bne _080034A2
|
|
|
|
movs r1, 0x1
|
|
|
|
_080034A2:
|
|
|
|
cmp r1, 0
|
|
|
|
beq _08003504
|
|
|
|
movs r0, 0
|
|
|
|
mov r12, r0
|
|
|
|
movs r3, 0
|
|
|
|
ldr r6, =gHeapCount
|
|
|
|
ldr r0, [r6]
|
|
|
|
cmp r12, r0
|
|
|
|
bge _080034F2
|
|
|
|
ldr r5, =gHeapDescriptorList
|
|
|
|
adds r1, r6, 0
|
|
|
|
adds r7, r5, 0
|
|
|
|
movs r2, 0
|
|
|
|
_080034BC:
|
|
|
|
adds r0, r2, r5
|
|
|
|
ldr r0, [r0]
|
|
|
|
cmp r0, r4
|
|
|
|
bne _080034E8
|
|
|
|
ldr r0, [r1]
|
|
|
|
subs r0, 0x1
|
|
|
|
str r0, [r1]
|
|
|
|
cmp r3, r0
|
|
|
|
bge _080034F8
|
|
|
|
ldr r1, =gHeapCount
|
|
|
|
adds r2, r7
|
|
|
|
_080034D2:
|
|
|
|
ldr r0, [r2, 0x4]
|
|
|
|
stm r2!, {r0}
|
|
|
|
adds r3, 0x1
|
|
|
|
ldr r0, [r1]
|
|
|
|
cmp r3, r0
|
|
|
|
blt _080034D2
|
|
|
|
b _080034F8
|
|
|
|
.align 2, 0
|
|
|
|
.pool
|
|
|
|
_080034E8:
|
|
|
|
adds r2, 0x4
|
|
|
|
adds r3, 0x1
|
|
|
|
ldr r0, [r6]
|
|
|
|
cmp r3, r0
|
|
|
|
blt _080034BC
|
|
|
|
_080034F2:
|
|
|
|
mov r0, r12
|
|
|
|
cmp r0, 0
|
|
|
|
beq _08003504
|
|
|
|
_080034F8:
|
|
|
|
ldr r0, [r4, 0x4]
|
|
|
|
cmp r0, 0
|
|
|
|
beq _08003504
|
|
|
|
adds r1, r4, 0
|
|
|
|
bl DoFree
|
|
|
|
_08003504:
|
|
|
|
pop {r4-r7}
|
|
|
|
pop {r0}
|
|
|
|
bx r0
|
|
|
|
thumb_func_end xxx_unused_memory_free
|
|
|
|
|
|
|
|
thumb_func_start DoAlloc
|
|
|
|
DoAlloc:
|
|
|
|
push {lr}
|
|
|
|
movs r3, 0x80
|
|
|
|
lsls r3, 1
|
|
|
|
orrs r3, r2
|
|
|
|
adds r2, r3, 0
|
|
|
|
bl _LocateSet
|
|
|
|
pop {r1}
|
|
|
|
bx r1
|
|
|
|
thumb_func_end DoAlloc
|
|
|
|
|
|
|
|
thumb_func_start DoFree
|
|
|
|
DoFree:
|
|
|
|
push {r4-r7,lr}
|
|
|
|
mov r7, r8
|
|
|
|
push {r7}
|
|
|
|
adds r4, r0, 0
|
|
|
|
cmp r4, 0
|
|
|
|
bne _0800352E
|
|
|
|
ldr r4, =gMainHeapDescriptor
|
|
|
|
_0800352E:
|
|
|
|
cmp r1, 0
|
|
|
|
beq _080035E4
|
|
|
|
movs r0, 0
|
|
|
|
mov r8, r0
|
|
|
|
ldr r3, [r4, 0x8]
|
|
|
|
mov r12, r3
|
|
|
|
ldr r3, [r4, 0xC]
|
|
|
|
cmp r8, r3
|
|
|
|
bge _080035E4
|
|
|
|
movs r2, 0
|
|
|
|
_08003542:
|
|
|
|
mov r5, r12
|
|
|
|
ldr r0, [r5, 0xC]
|
|
|
|
cmp r0, r1
|
|
|
|
bne _080035D8
|
|
|
|
str r2, [r5]
|
|
|
|
str r2, [r5, 0x4]
|
|
|
|
str r2, [r5, 0x14]
|
|
|
|
str r2, [r5, 0x8]
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
subs r0, 0x1
|
|
|
|
cmp r8, r0
|
|
|
|
bge _08003592
|
|
|
|
mov r2, r12
|
|
|
|
adds r2, 0x18
|
|
|
|
ldr r0, [r2, 0x4]
|
|
|
|
cmp r0, 0
|
|
|
|
bne _08003592
|
|
|
|
ldr r0, [r5, 0x10]
|
|
|
|
ldr r1, [r2, 0x10]
|
|
|
|
adds r0, r1
|
|
|
|
str r0, [r5, 0x10]
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
subs r0, 0x1
|
|
|
|
str r0, [r4, 0xC]
|
|
|
|
mov r3, r8
|
|
|
|
adds r3, 0x1
|
|
|
|
cmp r3, r0
|
|
|
|
bge _08003592
|
|
|
|
_0800357A:
|
|
|
|
adds r0, r2, 0
|
|
|
|
adds r1, r2, 0
|
|
|
|
adds r1, 0x18
|
|
|
|
ldm r1!, {r5-r7}
|
|
|
|
stm r0!, {r5-r7}
|
|
|
|
ldm r1!, {r5-r7}
|
|
|
|
stm r0!, {r5-r7}
|
|
|
|
adds r3, 0x1
|
|
|
|
adds r2, 0x18
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
cmp r3, r0
|
|
|
|
blt _0800357A
|
|
|
|
_08003592:
|
|
|
|
mov r6, r8
|
|
|
|
cmp r6, 0
|
|
|
|
ble _080035E4
|
|
|
|
mov r2, r12
|
|
|
|
subs r2, 0x18
|
|
|
|
ldr r0, [r2, 0x4]
|
|
|
|
cmp r0, 0
|
|
|
|
bne _080035E4
|
|
|
|
ldr r0, [r2, 0x10]
|
|
|
|
mov r7, r12
|
|
|
|
ldr r1, [r7, 0x10]
|
|
|
|
adds r0, r1
|
|
|
|
str r0, [r2, 0x10]
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
subs r0, 0x1
|
|
|
|
str r0, [r4, 0xC]
|
|
|
|
mov r2, r12
|
|
|
|
mov r3, r8
|
|
|
|
cmp r3, r0
|
|
|
|
bge _080035E4
|
|
|
|
_080035BA:
|
|
|
|
adds r0, r2, 0
|
|
|
|
adds r1, r2, 0
|
|
|
|
adds r1, 0x18
|
|
|
|
ldm r1!, {r5-r7}
|
|
|
|
stm r0!, {r5-r7}
|
|
|
|
ldm r1!, {r5-r7}
|
|
|
|
stm r0!, {r5-r7}
|
|
|
|
adds r3, 0x1
|
|
|
|
adds r2, 0x18
|
|
|
|
ldr r0, [r4, 0xC]
|
|
|
|
cmp r3, r0
|
|
|
|
blt _080035BA
|
|
|
|
b _080035E4
|
|
|
|
.align 2, 0
|
|
|
|
.pool
|
|
|
|
_080035D8:
|
|
|
|
movs r0, 0x1
|
|
|
|
add r8, r0
|
|
|
|
movs r5, 0x18
|
|
|
|
add r12, r5
|
|
|
|
cmp r8, r3
|
|
|
|
blt _08003542
|
|
|
|
_080035E4:
|
|
|
|
pop {r3}
|
|
|
|
mov r8, r3
|
|
|
|
pop {r4-r7}
|
|
|
|
pop {r0}
|
|
|
|
bx r0
|
|
|
|
thumb_func_end DoFree
|
|
|
|
|
|
|
|
.align 2,0
|