pmd-red/asm/memory.s

417 lines
6.2 KiB
ArmAsm
Raw Normal View History

#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
2017-12-11 11:20:15 +00:00
.syntax unified
.text
2017-12-11 11:20:15 +00:00
thumb_func_start MemorySearchFromFront
MemorySearchFromFront:
push {r4-r7,lr}
adds r5, r0, 0
adds r6, r2, 0
movs r0, 0x4
ands r0, r1
cmp r0, 0
beq _080030CC
movs r4, 0
ldr r3, [r5, 0x8]
ldr r2, [r5, 0xC]
cmp r4, r2
bge _08003104
ldr r0, [r3, 0x4]
movs r1, 0x1
ands r0, r1
cmp r0, 0
bne _08003090
ldr r0, [r3, 0x10]
cmp r0, r6
blt _080030AC
movs r0, 0
b _08003108
_08003090:
adds r4, 0x1
adds r3, 0x18
cmp r4, r2
bge _08003104
ldr r0, [r3, 0x4]
movs r1, 0x1
ands r0, r1
cmp r0, 0
bne _08003090
ldr r0, [r3, 0x10]
cmp r0, r6
blt _080030AC
_080030A8:
adds r0, r4, 0
b _08003108
_080030AC:
cmp r4, r2
bge _08003104
movs r5, 0x1
adds r1, r2, 0
_080030B4:
ldr r0, [r3, 0x4]
ands r0, r5
cmp r0, 0
bne _080030C2
ldr r0, [r3, 0x10]
cmp r0, r6
bge _080030A8
_080030C2:
adds r4, 0x1
adds r3, 0x18
cmp r4, r1
blt _080030B4
b _08003104
_080030CC:
movs r7, 0x1
negs r7, r7
ldr r1, _08003100
2017-12-11 11:20:15 +00:00
movs r4, 0
ldr r3, [r5, 0x8]
ldr r2, [r5, 0xC]
cmp r4, r2
bge _080030FC
movs r5, 0x1
_080030DE:
ldr r0, [r3, 0x4]
ands r0, r5
cmp r0, 0
bne _080030F4
ldr r0, [r3, 0x10]
cmp r0, r6
blt _080030F4
cmp r0, r1
bge _080030F4
adds r7, r4, 0
adds r1, r0, 0
_080030F4:
adds r4, 0x1
adds r3, 0x18
cmp r4, r2
blt _080030DE
_080030FC:
adds r0, r7, 0
b _08003108
.align 2, 0
_08003100: .4byte 0x00024001
2017-12-11 11:20:15 +00:00
_08003104:
movs r0, 0x1
negs r0, r0
_08003108:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end MemorySearchFromFront
thumb_func_start MemorySearchFromBack
MemorySearchFromBack:
push {r4-r7,lr}
adds r4, r0, 0
adds r5, r2, 0
movs r0, 0x4
ands r0, r1
cmp r0, 0
beq _08003168
ldr r0, [r4, 0xC]
subs r3, r0, 0x1
lsls r0, r3, 1
adds r0, r3
lsls r0, 3
ldr r1, [r4, 0x8]
adds r2, r1, r0
b _08003132
_0800312E:
subs r3, 0x1
subs r2, 0x18
_08003132:
cmp r3, 0
blt _080031A8
ldr r0, [r2, 0x4]
movs r1, 0x1
ands r0, r1
cmp r0, 0
bne _0800312E
ldr r0, [r2, 0x10]
cmp r0, r5
blt _0800314A
_08003146:
adds r0, r3, 0
b _080031AC
_0800314A:
cmp r3, 0
blt _080031A8
movs r1, 0x1
_08003150:
ldr r0, [r2, 0x4]
ands r0, r1
cmp r0, 0
bne _0800315E
ldr r0, [r2, 0x10]
cmp r0, r5
bge _08003146
_0800315E:
subs r3, 0x1
subs r2, 0x18
cmp r3, 0
bge _08003150
b _080031A8
_08003168:
movs r7, 0x1
negs r7, r7
ldr r6, =0x24001
2017-12-11 11:20:15 +00:00
ldr r0, [r4, 0xC]
subs r3, r0, 0x1
lsls r0, r3, 1
adds r0, r3
lsls r0, 3
ldr r1, [r4, 0x8]
adds r2, r1, r0
cmp r3, 0
blt _080031A0
movs r1, 0x1
_08003182:
ldr r0, [r2, 0x4]
ands r0, r1
cmp r0, 0
bne _08003198
ldr r0, [r2, 0x10]
cmp r0, r5
blt _08003198
cmp r0, r6
bge _08003198
adds r7, r3, 0
adds r6, r0, 0
_08003198:
subs r3, 0x1
subs r2, 0x18
cmp r3, 0
bge _08003182
_080031A0:
adds r0, r7, 0
b _080031AC
.align 2, 0
.pool
2017-12-11 11:20:15 +00:00
_080031A8:
movs r0, 0x1
negs r0, r0
_080031AC:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end MemorySearchFromBack
2017-12-11 21:50:00 +00:00
thumb_func_start _LocateSetFront
_LocateSetFront:
2017-12-11 11:20:15 +00:00
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
str r0, [sp, 0x8]
str r1, [sp, 0xC]
str r2, [sp]
str r3, [sp, 0x4]
adds r0, r3, 0
adds r0, 0x3
str r0, [sp, 0x10]
movs r0, 0x4
negs r0, r0
ldr r1, [sp, 0x10]
ands r1, r0
str r1, [sp, 0x10]
ldr r2, [sp, 0xC]
lsls r2, 1
mov r12, r2
ldr r0, [sp, 0xC]
add r0, r12
lsls r0, 3
ldr r5, [sp, 0x8]
ldr r2, [r5, 0x8]
adds r4, r2, r0
ldr r0, [r4, 0x10]
cmp r0, r1
ble _08003260
ldr r3, [r5, 0xC]
lsls r0, r3, 1
adds r0, r3
lsls r0, 3
adds r1, r2, r0
mov r9, r12
mov r10, r2
mov r12, r3
ldr r6, [r5, 0x10]
mov r8, r6
ldr r7, [sp, 0xC]
cmp r12, r7
ble _08003222
_0800320A:
adds r2, r1, 0
subs r2, 0x18
adds r0, r2, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
subs r3, 0x1
adds r1, r2, 0
ldr r0, [sp, 0xC]
cmp r3, r0
bgt _0800320A
_08003222:
mov r2, r12
adds r2, 0x1
ldr r1, [sp, 0x8]
str r2, [r1, 0xC]
cmp r2, r8
ble _08003240
ldr r0, =gUnknown_80B7EB8
ldr r1, =gUnknown_80B7EC4
2017-12-11 11:20:15 +00:00
mov r3, r8
bl FatalError
.align 2, 0
.pool
2017-12-11 11:20:15 +00:00
_08003240:
ldr r0, [sp, 0xC]
add r0, r9
lsls r0, 3
adds r0, 0x18
mov r2, r10
adds r1, r2, r0
ldr r0, [r1, 0xC]
ldr r5, [sp, 0x10]
adds r0, r5
str r0, [r1, 0xC]
ldr r0, [r1, 0x10]
subs r0, r5
str r0, [r1, 0x10]
str r5, [r4, 0x10]
ldr r6, [sp, 0x4]
str r6, [r4, 0x14]
_08003260:
ldr r0, [sp]
bl xxx_memory_attr_related
str r0, [r4]
ldr r7, [sp]
str r7, [r4, 0x4]
ldr r0, [sp, 0x34]
str r0, [r4, 0x8]
adds r0, r4, 0
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
2017-12-11 21:50:00 +00:00
thumb_func_end _LocateSetFront
2017-12-11 11:20:15 +00:00
2017-12-11 21:50:00 +00:00
thumb_func_start _LocateSetBack
_LocateSetBack:
2017-12-11 11:20:15 +00:00
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
str r0, [sp, 0x8]
str r1, [sp, 0xC]
str r2, [sp]
str r3, [sp, 0x4]
adds r0, r3, 0
adds r0, 0x3
str r0, [sp, 0x10]
movs r0, 0x4
negs r0, r0
ldr r1, [sp, 0x10]
ands r1, r0
str r1, [sp, 0x10]
ldr r2, [sp, 0xC]
lsls r0, r2, 1
adds r0, r2
lsls r0, 3
ldr r5, [sp, 0x8]
ldr r1, [r5, 0x8]
adds r4, r1, r0
ldr r0, [r4, 0x10]
ldr r6, [sp, 0x10]
cmp r0, r6
ble _08003328
ldr r3, [r5, 0xC]
lsls r0, r3, 1
adds r0, r3
lsls r0, 3
adds r1, r0
mov r12, r3
ldr r7, [r5, 0x10]
mov r8, r7
ldr r0, [r4, 0xC]
mov r9, r0
movs r2, 0x18
adds r2, r4
mov r10, r2
ldr r5, [sp, 0xC]
cmp r12, r5
ble _080032F6
_080032DE:
adds r2, r1, 0
subs r2, 0x18
adds r0, r2, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
subs r3, 0x1
adds r1, r2, 0
ldr r6, [sp, 0xC]
cmp r3, r6
bgt _080032DE
_080032F6:
mov r2, r12
adds r2, 0x1
ldr r7, [sp, 0x8]
str r2, [r7, 0xC]
cmp r2, r8
ble _08003314
ldr r0, =gUnknown_80B7EFC
ldr r1, =gUnknown_80B7EC4
2017-12-11 11:20:15 +00:00
mov r3, r8
bl FatalError
.align 2, 0
.pool
2017-12-11 11:20:15 +00:00
_08003314:
ldr r0, [r4, 0x10]
ldr r1, [sp, 0x10]
subs r0, r1
str r0, [r4, 0x10]
add r0, r9
mov r4, r10
str r0, [r4, 0xC]
str r1, [r4, 0x10]
ldr r2, [sp, 0x4]
str r2, [r4, 0x14]
_08003328:
ldr r0, [sp]
bl xxx_memory_attr_related
str r0, [r4]
ldr r5, [sp]
str r5, [r4, 0x4]
ldr r0, [sp, 0x34]
str r0, [r4, 0x8]
adds r0, r4, 0
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
2017-12-11 21:50:00 +00:00
thumb_func_end _LocateSetBack
2017-12-11 11:20:15 +00:00
.align 2, 0 @ Don't pad with nop.