pmd-red/asm/memory_1.s
Seth Barberee eaa141c612
Keep on keepin on (#38)
* end of may dump of work

* move save text to src

* decomp a little more
2021-05-23 16:19:35 -05:00

275 lines
4.0 KiB
ArmAsm

.include "constants/gba_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start MemoryLocate_LocalCreate
MemoryLocate_LocalCreate:
push {r4-r7,lr}
sub sp, 0xC
adds r4, r0, 0
adds r5, r1, 0
adds r7, r2, 0
adds r6, r3, 0
cmp r4, 0
bne _08003412
ldr r4, =gMainHeapDescriptor
_08003412:
adds r0, r4, 0
movs r1, 0x9
adds r2, r5, 0
bl MemorySearchFromBack
adds r1, r0, 0
cmp r1, 0
bge _08003438
ldr r0, =gUnknown_80B7F88
ldr r1, =gUnknown_80B7F94
adds r2, r5, 0
bl FatalError
.align 2, 0
.pool
_08003438:
str r6, [sp]
adds r0, r4, 0
movs r2, 0x9
adds r3, r5, 0
bl _LocateSetBack
ldr r1, [r0, 0xC]
str r1, [sp, 0x4]
ldr r0, [r0, 0x10]
str r0, [sp, 0x8]
add r0, sp, 0x4
adds r1, r7, 0
bl DoCreateSubHeap
str r4, [r0, 0x4]
add sp, 0xC
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end MemoryLocate_LocalCreate
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