pmd-sky/asm/main_0200119C.s
2025-09-19 18:47:09 -04:00

535 lines
9.5 KiB
ArmAsm

.include "asm/macros.inc"
.include "main_0200119C.inc"
.text
arm_func_start MemArenaAlloc
MemArenaAlloc: ; 0x0200119C
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #0x14
mov r5, r0
ldr r0, _0200126C ; =_020AEF08
mov r4, r1
mov r7, r2
mov r6, r3
bl sub_02002CB4
ldr r1, _02001270 ; =MEMORY_ALLOCATION_ARENA_GETTERS
mov r0, r5
ldr r2, [r1]
mov r1, r6
blx r2
movs r5, r0
ldreq r5, _02001274 ; =_020B3384
mov r2, r4
mov r0, r5
mov r1, #9
bl FindAvailableMemBlock
movs r1, r0
bmi _02001238
mov r0, r5
mov r3, r4
str r6, [sp]
mov r2, #9
bl SplitMemBlock
ldr r2, [r0, #0xc]
mov r1, r7
str r2, [sp, #0xc]
ldr r2, [r0, #0x10]
add r0, sp, #0xc
str r2, [sp, #0x10]
bl CreateMemArena
mov r4, r0
ldr r0, _0200126C ; =_020AEF08
str r5, [r4, #4]
bl sub_02002E98
mov r0, r4
b _02001264
_02001238:
ldr r0, _0200126C ; =_020AEF08
bl sub_02002E98
ldr r1, _02001278 ; =_02090B40
add r0, sp, #4
ldr r3, [r1, #0xc]
ldr ip, [r1, #8]
ldr r1, _0200127C ; =_02090BC8
mov r2, r4
str ip, [sp, #4]
str r3, [sp, #8]
bl Debug_FatalError
_02001264:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, pc}
.align 2, 0
_0200126C: .word _020AEF08
_02001270: .word MEMORY_ALLOCATION_ARENA_GETTERS
_02001274: .word _020B3384
_02001278: .word _02090B40
_0200127C: .word _02090BC8
arm_func_end MemArenaAlloc
arm_func_start CreateMemArena
CreateMemArena: ; 0x02001280
stmdb sp!, {r4, lr}
sub sp, sp, #8
mov r3, r1
mov r1, #0x18
mul r2, r3, r1
ldr r1, [r0, #4]
ldr r4, [r0]
add r0, r2, #3
bic ip, r0, #3
sub r0, r1, #0x1c
sub r0, r0, ip
bic lr, r0, #3
add r2, r4, #0x1c
add ip, r2, ip
add r1, sp, #0
mov r0, r4
str ip, [sp]
str lr, [sp, #4]
bl InitMemArena
mov r0, r4
add sp, sp, #8
ldmia sp!, {r4, pc}
arm_func_end CreateMemArena
arm_func_start sub_020012D8
sub_020012D8: ; 0x020012D8
stmdb sp!, {r3, lr}
movs r1, r0
ldmeqia sp!, {r3, pc}
ldr r0, [r1, #0xc]
cmp r0, #1
ldreq r0, [r1, #8]
ldreq r0, [r0, #4]
cmpeq r0, #0
moveq r0, #1
movne r0, #0
tst r0, #0xff
ldmeqia sp!, {r3, pc}
ldr r0, _02001388 ; =_020B3380
mov ip, #0
mov r3, ip
ldr lr, [r0]
ldr r2, _0200138C ; =_020B33A0
b _02001368
_02001320:
ldr r0, [r2, r3, lsl #2]
cmp r0, r1
bne _02001364
ldr r0, _02001388 ; =_020B3380
ldr r2, [r0]
sub ip, r2, #1
str ip, [r0]
ldr r2, _0200138C ; =_020B33A0
b _02001354
_02001344:
add r0, r2, r3, lsl #2
ldr r0, [r0, #4]
str r0, [r2, r3, lsl #2]
add r3, r3, #1
_02001354:
cmp r3, ip
blt _02001344
mov ip, #1
b _02001370
_02001364:
add r3, r3, #1
_02001368:
cmp r3, lr
blt _02001320
_02001370:
cmp ip, #0
ldrne r0, [r1, #4]
cmpne r0, #0
ldmeqia sp!, {r3, pc}
bl MemLocateUnset
ldmia sp!, {r3, pc}
.align 2, 0
_02001388: .word _020B3380
_0200138C: .word _020B33A0
arm_func_end sub_020012D8
arm_func_start MemLocateSet
MemLocateSet: ; 0x02001390
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x20
mov r4, r0
ldr r0, _0200161C ; =_020AEF08
mov r5, r1
orr r7, r2, #0x100
bl sub_02002CB4
ldr r1, _02001620 ; =MEMORY_ALLOCATION_ARENA_GETTERS
mov r0, r4
ldr r2, [r1]
mov r1, r7
blx r2
movs r4, r0
mov r0, r7, asr #8
orr r8, r0, #1
and r0, r8, #2
ldreq r4, _02001624 ; =_020B3384
cmp r0, #2
and sb, r7, #0xff
bne _020015A0
tst r8, #4
ldr r0, [r4, #8]
ldr lr, [r4, #0xc]
beq _02001458
mov r2, r0
mov r7, #0
b _02001420
_020013FC:
ldr r1, [r2, #4]
tst r1, #1
bne _02001418
ldr r1, [r2, #0x10]
cmp r1, r5
blt _0200144C
b _020014A8
_02001418:
add r7, r7, #1
add r2, r2, #0x18
_02001420:
cmp r7, lr
blt _020013FC
b _0200144C
_0200142C:
ldr r1, [r2, #4]
tst r1, #1
bne _02001444
ldr r1, [r2, #0x10]
cmp r1, r5
bge _020014A8
_02001444:
add r7, r7, #1
add r2, r2, #0x18
_0200144C:
cmp r7, lr
blt _0200142C
b _020014A4
_02001458:
mov sl, r0
mvn r7, #0
ldr r2, _02001628 ; =0x001E6401
mov r3, #0
b _02001498
_0200146C:
ldr r1, [sl, #4]
tst r1, #1
bne _02001490
ldr r1, [sl, #0x10]
cmp r1, r5
blt _02001490
cmp r1, r2
movlt r7, r3
movlt r2, r1
_02001490:
add r3, r3, #1
add sl, sl, #0x18
_02001498:
cmp r3, lr
blt _0200146C
b _020014A8
_020014A4:
mvn r7, #0
_020014A8:
cmp r7, #0
blt _020015DC
mov r1, #0x18
mla r6, r7, r1, r0
add r3, r5, #3
ldr r2, [r6, #0x10]
bic fp, r3, #3
cmp r2, fp
ble _02001584
mla ip, lr, r1, r0
b _0200150C
_020014D4:
sub r0, ip, #0x18
mov sl, r0
ldmia sl!, {r0, r1, r2, r3}
str sl, [sp, #0xc]
mov sl, ip
stmia sl!, {r0, r1, r2, r3}
str ip, [sp, #8]
ldr r0, [sp, #0xc]
mov r2, sl
ldmia r0, {r0, r1}
stmia r2, {r0, r1}
str sl, [sp, #8]
sub lr, lr, #1
sub ip, ip, #0x18
_0200150C:
cmp lr, r7
bgt _020014D4
ldr r0, [r4, #0xc]
add r1, r0, #1
str r1, [r4, #0xc]
ldr r0, [r4, #0x10]
cmp r1, r0
ble _02001554
ldr r1, _0200162C ; =_02090B40
add r0, sp, #0x18
ldr r2, [r1, #0x14]
ldr r1, [r1, #0x10]
str r2, [sp, #0x1c]
str r1, [sp, #0x18]
ldr r2, [r4, #0xc]
ldr r3, [r4, #0x10]
ldr r1, _02001630 ; =_02090BA0
bl Debug_FatalError
_02001554:
ldr r2, [r4, #8]
add r1, r7, #1
mov r0, #0x18
mla r2, r1, r0, r2
ldr r0, [r2, #0xc]
add r0, r0, fp
str r0, [r2, #0xc]
ldr r0, [r2, #0x10]
sub r0, r0, fp
str r0, [r2, #0x10]
str fp, [r6, #0x10]
str r5, [r6, #0x14]
_02001584:
mov r0, r8
bl MemAllocFlagsToBlockType
stmia r6, {r0, r8, sb}
ldr r0, _0200161C ; =_020AEF08
ldr r6, [r6, #0xc]
bl sub_02002E98
b _02001610
_020015A0:
mov r0, r4
mov r1, r8
mov r2, r5
bl FindAvailableMemBlock
movs r1, r0
bmi _020015DC
mov r0, r4
mov r2, r8
mov r3, r5
str sb, [sp]
bl SplitMemBlock
ldr r6, [r0, #0xc]
ldr r0, _0200161C ; =_020AEF08
bl sub_02002E98
b _02001610
_020015DC:
ldr r0, _0200161C ; =_020AEF08
bl sub_02002E98
ldr r1, _0200162C ; =_02090B40
add r0, sp, #0x10
ldr r2, [r1, #4]
ldr r1, [r1]
str r2, [sp, #0x14]
str r1, [sp, #0x10]
ldr r1, _02001634 ; =_02090BFC
mov r2, r4
mov r3, r5
stmia sp, {r8, sb}
bl Debug_FatalError
_02001610:
mov r0, r6
add sp, sp, #0x20
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0200161C: .word _020AEF08
_02001620: .word MEMORY_ALLOCATION_ARENA_GETTERS
_02001624: .word _020B3384
_02001628: .word 0x001E6401
_0200162C: .word _02090B40
_02001630: .word _02090BA0
_02001634: .word _02090BFC
arm_func_end MemLocateSet
arm_func_start MemLocateUnset
MemLocateUnset: ; 0x02001638
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r0
ldr r0, _020017A8 ; =_020AEF08
mov r6, r1
bl sub_02002CB4
ldr r1, _020017AC ; =MEMORY_ALLOCATION_ARENA_GETTERS
mov r0, r7
ldr r2, [r1, #4]
mov r1, r6
blx r2
movs r7, r0
ldreq r7, _020017B0 ; =_020B3384
cmp r6, #0
bne _0200167C
ldr r0, _020017A8 ; =_020AEF08
bl sub_02002E98
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200167C:
ldr r4, [r7, #8]
ldr r1, [r7, #0xc]
mov r5, #0
b _02001794
_0200168C:
ldr r0, [r4, #0xc]
cmp r0, r6
bne _0200178C
mov r0, #0
str r0, [r4]
str r0, [r4, #4]
str r0, [r4, #0x14]
str r0, [r4, #8]
ldr r0, [r7, #0xc]
sub r0, r0, #1
cmp r5, r0
bge _0200171C
add ip, r4, #0x18
ldr r0, [ip, #4]
cmp r0, #0
bne _0200171C
ldr r1, [r4, #0x10]
ldr r0, [ip, #0x10]
add lr, r5, #1
add r0, r1, r0
str r0, [r4, #0x10]
ldr r0, [r7, #0xc]
sub r0, r0, #1
str r0, [r7, #0xc]
b _02001710
_020016F0:
add r8, ip, #0x18
mov r6, ip
ldmia r8!, {r0, r1, r2, r3}
stmia r6!, {r0, r1, r2, r3}
ldmia r8, {r0, r1}
stmia r6, {r0, r1}
add lr, lr, #1
add ip, ip, #0x18
_02001710:
ldr r0, [r7, #0xc]
cmp lr, r0
blt _020016F0
_0200171C:
cmp r5, #0
ble _02001780
sub r2, r4, #0x18
ldr r0, [r2, #4]
cmp r0, #0
bne _02001780
ldr r1, [r2, #0x10]
ldr r0, [r4, #0x10]
add r0, r1, r0
str r0, [r2, #0x10]
ldr r0, [r7, #0xc]
sub r0, r0, #1
str r0, [r7, #0xc]
b _02001774
_02001754:
add ip, r4, #0x18
mov r6, r4
ldmia ip!, {r0, r1, r2, r3}
stmia r6!, {r0, r1, r2, r3}
ldmia ip, {r0, r1}
stmia r6, {r0, r1}
add r5, r5, #1
add r4, r4, #0x18
_02001774:
ldr r0, [r7, #0xc]
cmp r5, r0
blt _02001754
_02001780:
ldr r0, _020017A8 ; =_020AEF08
bl sub_02002E98
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200178C:
add r5, r5, #1
add r4, r4, #0x18
_02001794:
cmp r5, r1
blt _0200168C
ldr r0, _020017A8 ; =_020AEF08
bl sub_02002E98
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_020017A8: .word _020AEF08
_020017AC: .word MEMORY_ALLOCATION_ARENA_GETTERS
_020017B0: .word _020B3384
arm_func_end MemLocateUnset
arm_func_start sub_020017B4
sub_020017B4: ; 0x020017B4
ldr r2, [r0, #8]
ldr ip, [r0, #0xc]
mov r3, #0
b _020017DC
_020017C4:
ldr r0, [r2, #0xc]
cmp r0, r1
moveq r0, #1
bxeq lr
add r3, r3, #1
add r2, r2, #0x18
_020017DC:
cmp r3, ip
blt _020017C4
mov r0, #0
bx lr
arm_func_end sub_020017B4
arm_func_start sub_020017EC
sub_020017EC: ; 0x020017EC
stmdb sp!, {r3, lr}
ldr r0, _02001804 ; =_020AEF08
bl sub_02002CB4
ldr r0, _02001804 ; =_020AEF08
bl sub_02002E98
ldmia sp!, {r3, pc}
.align 2, 0
_02001804: .word _020AEF08
arm_func_end sub_020017EC
arm_func_start sub_02001808
sub_02001808: ; 0x02001808
stmdb sp!, {r4, lr}
ldr r0, _0200187C ; =_020AEF08
bl sub_02002CB4
ldr r0, _02001880 ; =MEMORY_ALLOCATION_ARENA_GETTERS
mov r4, #0
ldr r2, [r0]
ldr r0, _02001884 ; =_020B3384
mov r1, r4
blx r2
cmp r0, #0
ldreq r0, _02001884 ; =_020B3384
mov r1, #0
ldr r2, [r0, #8]
ldr r3, [r0, #0xc]
b _02001864
_02001844:
ldr r0, [r2]
cmp r0, #0
bne _0200185C
ldr r0, [r2, #0x10]
cmp r4, r0
movlt r4, r0
_0200185C:
add r1, r1, #1
add r2, r2, #0x18
_02001864:
cmp r1, r3
blt _02001844
ldr r0, _0200187C ; =_020AEF08
bl sub_02002E98
mov r0, r4
ldmia sp!, {r4, pc}
.align 2, 0
_0200187C: .word _020AEF08
_02001880: .word MEMORY_ALLOCATION_ARENA_GETTERS
_02001884: .word _020B3384
arm_func_end sub_02001808
arm_func_start sub_02001888
sub_02001888: ; 0x02001888
tst r0, #0xff
addne r0, r0, #0x100
bx lr
arm_func_end sub_02001888