mirror of
https://github.com/pret/pmd-red.git
synced 2024-11-26 22:40:33 +00:00
99a038284b
This decision was made to reduce the complexity of using .include whilst juggling with tools/scaninc and tools/preproc: - tools/scaninc doesn't apply the proper search rules for .include (it assumes #include behavior). In particular, it doesn't consider paths starting from $PWD, and doesn't scan the included files as a result. - .include had to be processed before #include by preproc in many cases, as code was being included that had to be preprocessed by CPP (think of #define). This contradicts standard GCC behavior. To make include paths consistent across the asm/ data/ and src/ directories, the following files were moved: - constants/ → include/asm/constants/ - asm/macros/ → include/asm/macros/ - asm/macros.inc → include/asm/macros.inc - include/macros/m4a.inc → include/asm/macros/m4a.inc As part of the necessary changes for this to work, the scaninc method in the makefile was improved to generate .d files that don't choke when files are missing.
417 lines
6.2 KiB
ArmAsm
417 lines
6.2 KiB
ArmAsm
#include "asm/constants/gba_constants.inc"
|
|
#include "asm/macros.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
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
|
|
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
|
|
_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
|
|
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
|
|
_080031A8:
|
|
movs r0, 0x1
|
|
negs r0, r0
|
|
_080031AC:
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end MemorySearchFromBack
|
|
|
|
thumb_func_start _LocateSetFront
|
|
_LocateSetFront:
|
|
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
|
|
mov r3, r8
|
|
bl FatalError
|
|
.align 2, 0
|
|
.pool
|
|
_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
|
|
thumb_func_end _LocateSetFront
|
|
|
|
thumb_func_start _LocateSetBack
|
|
_LocateSetBack:
|
|
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
|
|
mov r3, r8
|
|
bl FatalError
|
|
.align 2, 0
|
|
.pool
|
|
_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
|
|
thumb_func_end _LocateSetBack
|
|
|
|
|
|
.align 2, 0 @ Don't pad with nop.
|