mirror of
https://github.com/pret/pokeemerald-jp.git
synced 2026-09-26 05:31:09 -04:00
402 lines
6.5 KiB
ArmAsm
402 lines
6.5 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "constants/constants.inc"
|
|
.text
|
|
.syntax unified
|
|
|
|
thumb_func_start PutMemBlockHeader
|
|
PutMemBlockHeader: @ 0x08000988
|
|
push {r4, lr}
|
|
movs r4, #0
|
|
strh r4, [r0]
|
|
ldr r4, _080009A0
|
|
strh r4, [r0, #2]
|
|
str r3, [r0, #4]
|
|
str r1, [r0, #8]
|
|
str r2, [r0, #0xc]
|
|
pop {r4}
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_080009A0: .4byte 0x0000A3A3
|
|
thumb_func_end PutMemBlockHeader
|
|
|
|
thumb_func_start PutFirstMemBlockHeader
|
|
PutFirstMemBlockHeader: @ 0x080009A4
|
|
push {lr}
|
|
adds r2, r0, #0
|
|
adds r3, r1, #0
|
|
subs r3, #0x10
|
|
adds r1, r2, #0
|
|
bl PutMemBlockHeader
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
thumb_func_end PutFirstMemBlockHeader
|
|
|
|
thumb_func_start AllocInternal
|
|
AllocInternal: @ 0x080009B8
|
|
push {r4, r5, r6, lr}
|
|
adds r4, r0, #0
|
|
adds r6, r4, #0
|
|
movs r0, #3
|
|
ands r0, r1
|
|
cmp r0, #0
|
|
beq _080009CC
|
|
lsrs r0, r1, #2
|
|
adds r0, #1
|
|
lsls r1, r0, #2
|
|
_080009CC:
|
|
movs r2, #1
|
|
_080009CE:
|
|
ldrh r0, [r4]
|
|
cmp r0, #0
|
|
bne _08000A0C
|
|
ldr r3, [r4, #4]
|
|
cmp r3, r1
|
|
blo _08000A0C
|
|
subs r0, r3, r1
|
|
cmp r0, #0x1f
|
|
bhi _080009E4
|
|
strh r2, [r4]
|
|
b _08000A06
|
|
_080009E4:
|
|
subs r3, #0x10
|
|
subs r3, r3, r1
|
|
adds r0, r1, #0
|
|
adds r0, #0x10
|
|
adds r5, r4, r0
|
|
strh r2, [r4]
|
|
str r1, [r4, #4]
|
|
ldr r2, [r4, #0xc]
|
|
adds r0, r5, #0
|
|
adds r1, r4, #0
|
|
bl PutMemBlockHeader
|
|
str r5, [r4, #0xc]
|
|
ldr r0, [r5, #0xc]
|
|
cmp r0, r6
|
|
beq _08000A06
|
|
str r5, [r0, #8]
|
|
_08000A06:
|
|
adds r0, r4, #0
|
|
adds r0, #0x10
|
|
b _08000A24
|
|
_08000A0C:
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, r6
|
|
beq _08000A16
|
|
adds r4, r0, #0
|
|
b _080009CE
|
|
_08000A16:
|
|
ldr r0, _08000A2C
|
|
movs r1, #0xae
|
|
ldr r2, _08000A30
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
movs r0, #0
|
|
_08000A24:
|
|
pop {r4, r5, r6}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08000A2C: .4byte 0x0829BDF4
|
|
_08000A30: .4byte 0x0829BE08
|
|
thumb_func_end AllocInternal
|
|
|
|
thumb_func_start FreeInternal
|
|
FreeInternal: @ 0x08000A34
|
|
push {r4, r5, r6, r7, lr}
|
|
cmp r1, #0
|
|
bne _08000A50
|
|
ldr r0, _08000A48
|
|
ldr r2, _08000A4C
|
|
movs r1, #0xc3
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
b _08000AF6
|
|
.align 2, 0
|
|
_08000A48: .4byte 0x0829BDF4
|
|
_08000A4C: .4byte 0x0829BE0C
|
|
_08000A50:
|
|
adds r6, r0, #0
|
|
adds r4, r1, #0
|
|
subs r4, #0x10
|
|
ldrh r0, [r4, #2]
|
|
ldr r7, _08000AFC
|
|
cmp r0, r7
|
|
beq _08000A6A
|
|
ldr r0, _08000B00
|
|
ldr r2, _08000B04
|
|
movs r1, #0xcc
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
_08000A6A:
|
|
ldrh r0, [r4]
|
|
cmp r0, #1
|
|
beq _08000A7C
|
|
ldr r0, _08000B00
|
|
ldr r2, _08000B08
|
|
movs r1, #0xcd
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
_08000A7C:
|
|
movs r0, #0
|
|
strh r0, [r4]
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, r6
|
|
beq _08000AB8
|
|
ldrh r5, [r0]
|
|
cmp r5, #0
|
|
bne _08000AB8
|
|
ldrh r0, [r0, #2]
|
|
cmp r0, r7
|
|
beq _08000A9E
|
|
ldr r0, _08000B00
|
|
ldr r2, _08000B0C
|
|
movs r1, #0xd3
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
_08000A9E:
|
|
ldr r0, [r4, #4]
|
|
adds r0, #0x10
|
|
ldr r2, [r4, #0xc]
|
|
ldr r1, [r2, #4]
|
|
adds r0, r0, r1
|
|
str r0, [r4, #4]
|
|
strh r5, [r2, #2]
|
|
ldr r0, [r4, #0xc]
|
|
ldr r0, [r0, #0xc]
|
|
str r0, [r4, #0xc]
|
|
cmp r0, r6
|
|
beq _08000AB8
|
|
str r4, [r0, #8]
|
|
_08000AB8:
|
|
cmp r4, r6
|
|
beq _08000AF6
|
|
ldr r0, [r4, #8]
|
|
ldrh r5, [r0]
|
|
cmp r5, #0
|
|
bne _08000AF6
|
|
ldrh r1, [r0, #2]
|
|
ldr r0, _08000AFC
|
|
cmp r1, r0
|
|
beq _08000AD8
|
|
ldr r0, _08000B00
|
|
ldr r2, _08000B10
|
|
movs r1, #0xe4
|
|
movs r3, #1
|
|
bl AGBAssert
|
|
_08000AD8:
|
|
ldr r1, [r4, #8]
|
|
ldr r0, [r4, #0xc]
|
|
str r0, [r1, #0xc]
|
|
ldr r1, [r4, #0xc]
|
|
cmp r1, r6
|
|
beq _08000AE8
|
|
ldr r0, [r4, #8]
|
|
str r0, [r1, #8]
|
|
_08000AE8:
|
|
strh r5, [r4, #2]
|
|
ldr r0, [r4, #8]
|
|
ldr r1, [r0, #4]
|
|
adds r1, #0x10
|
|
ldr r2, [r4, #4]
|
|
adds r1, r1, r2
|
|
str r1, [r0, #4]
|
|
_08000AF6:
|
|
pop {r4, r5, r6, r7}
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_08000AFC: .4byte 0x0000A3A3
|
|
_08000B00: .4byte 0x0829BDF4
|
|
_08000B04: .4byte 0x0829BE18
|
|
_08000B08: .4byte 0x0829BE40
|
|
_08000B0C: .4byte 0x0829BE54
|
|
_08000B10: .4byte 0x0829BE80
|
|
thumb_func_end FreeInternal
|
|
|
|
thumb_func_start AllocZeroedInternal
|
|
AllocZeroedInternal: @ 0x08000B14
|
|
push {r4, r5, lr}
|
|
sub sp, #4
|
|
adds r4, r1, #0
|
|
bl AllocInternal
|
|
adds r5, r0, #0
|
|
cmp r5, #0
|
|
beq _08000B48
|
|
movs r0, #3
|
|
ands r0, r4
|
|
cmp r0, #0
|
|
beq _08000B32
|
|
lsrs r0, r4, #2
|
|
adds r0, #1
|
|
lsls r4, r0, #2
|
|
_08000B32:
|
|
movs r0, #0
|
|
str r0, [sp]
|
|
lsls r2, r4, #9
|
|
lsrs r2, r2, #0xb
|
|
movs r0, #0xa0
|
|
lsls r0, r0, #0x13
|
|
orrs r2, r0
|
|
mov r0, sp
|
|
adds r1, r5, #0
|
|
bl CpuSet
|
|
_08000B48:
|
|
adds r0, r5, #0
|
|
add sp, #4
|
|
pop {r4, r5}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
thumb_func_end AllocZeroedInternal
|
|
|
|
thumb_func_start CheckMemBlockInternal
|
|
CheckMemBlockInternal: @ 0x08000B54
|
|
push {r4, r5, lr}
|
|
adds r5, r0, #0
|
|
adds r3, r1, #0
|
|
subs r3, #0x10
|
|
ldrh r2, [r3, #2]
|
|
ldr r0, _08000BA0
|
|
cmp r2, r0
|
|
bne _08000B9A
|
|
ldr r0, [r3, #0xc]
|
|
ldrh r1, [r0, #2]
|
|
adds r4, r0, #0
|
|
cmp r1, r2
|
|
bne _08000B9A
|
|
cmp r4, r5
|
|
beq _08000B78
|
|
ldr r0, [r4, #8]
|
|
cmp r0, r3
|
|
bne _08000B9A
|
|
_08000B78:
|
|
ldr r2, [r3, #8]
|
|
ldrh r1, [r2, #2]
|
|
ldr r0, _08000BA0
|
|
cmp r1, r0
|
|
bne _08000B9A
|
|
cmp r2, r5
|
|
beq _08000B8C
|
|
ldr r0, [r2, #0xc]
|
|
cmp r0, r3
|
|
bne _08000B9A
|
|
_08000B8C:
|
|
cmp r4, r5
|
|
beq _08000BA4
|
|
ldr r0, [r3, #4]
|
|
adds r0, #0x10
|
|
adds r0, r3, r0
|
|
cmp r4, r0
|
|
beq _08000BA4
|
|
_08000B9A:
|
|
movs r0, #0
|
|
b _08000BA6
|
|
.align 2, 0
|
|
_08000BA0: .4byte 0x0000A3A3
|
|
_08000BA4:
|
|
movs r0, #1
|
|
_08000BA6:
|
|
pop {r4, r5}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end CheckMemBlockInternal
|
|
|
|
thumb_func_start InitHeap
|
|
InitHeap: @ 0x08000BAC
|
|
push {lr}
|
|
ldr r2, _08000BC0
|
|
str r0, [r2]
|
|
ldr r2, _08000BC4
|
|
str r1, [r2]
|
|
bl PutFirstMemBlockHeader
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_08000BC0: .4byte 0x03000004
|
|
_08000BC4: .4byte 0x03000008
|
|
thumb_func_end InitHeap
|
|
|
|
thumb_func_start Alloc
|
|
Alloc: @ 0x08000BC8
|
|
push {lr}
|
|
adds r1, r0, #0
|
|
ldr r0, _08000BD8
|
|
ldr r0, [r0]
|
|
bl AllocInternal
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08000BD8: .4byte 0x03000004
|
|
thumb_func_end Alloc
|
|
|
|
thumb_func_start AllocZeroed
|
|
AllocZeroed: @ 0x08000BDC
|
|
push {lr}
|
|
adds r1, r0, #0
|
|
ldr r0, _08000BEC
|
|
ldr r0, [r0]
|
|
bl AllocZeroedInternal
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08000BEC: .4byte 0x03000004
|
|
thumb_func_end AllocZeroed
|
|
|
|
thumb_func_start Free
|
|
Free: @ 0x08000BF0
|
|
push {lr}
|
|
adds r1, r0, #0
|
|
ldr r0, _08000C00
|
|
ldr r0, [r0]
|
|
bl FreeInternal
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_08000C00: .4byte 0x03000004
|
|
thumb_func_end Free
|
|
|
|
thumb_func_start CheckMemBlock
|
|
CheckMemBlock: @ 0x08000C04
|
|
push {lr}
|
|
adds r1, r0, #0
|
|
ldr r0, _08000C14
|
|
ldr r0, [r0]
|
|
bl CheckMemBlockInternal
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08000C14: .4byte 0x03000004
|
|
thumb_func_end CheckMemBlock
|
|
|
|
thumb_func_start CheckHeap
|
|
CheckHeap: @ 0x08000C18
|
|
push {r4, r5, lr}
|
|
ldr r0, _08000C3C
|
|
ldr r4, [r0]
|
|
adds r5, r0, #0
|
|
_08000C20:
|
|
ldr r0, [r5]
|
|
adds r1, r4, #0
|
|
adds r1, #0x10
|
|
bl CheckMemBlockInternal
|
|
cmp r0, #0
|
|
beq _08000C40
|
|
ldr r4, [r4, #0xc]
|
|
ldr r0, [r5]
|
|
cmp r4, r0
|
|
bne _08000C20
|
|
movs r0, #1
|
|
b _08000C42
|
|
.align 2, 0
|
|
_08000C3C: .4byte 0x03000004
|
|
_08000C40:
|
|
movs r0, #0
|
|
_08000C42:
|
|
pop {r4, r5}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end CheckHeap
|
|
|