mirror of
https://github.com/pret/pmd-red.git
synced 2024-11-27 23:10:50 +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.
664 lines
9.8 KiB
ArmAsm
664 lines
9.8 KiB
ArmAsm
#include "asm/constants/gba_constants.inc"
|
|
#include "asm/macros.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start sub_803C1D0
|
|
sub_803C1D0:
|
|
push {lr}
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
bl sub_803C1B4
|
|
adds r1, r0, 0
|
|
lsrs r0, r1, 31
|
|
adds r0, r1, r0
|
|
asrs r1, r0, 1
|
|
lsls r0, r1, 24
|
|
lsrs r0, 24
|
|
cmp r0, 0x6
|
|
bls _0803C1EC
|
|
movs r0, 0x6
|
|
_0803C1EC:
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803C1D0
|
|
|
|
thumb_func_start sub_803C1F0
|
|
sub_803C1F0:
|
|
lsls r0, 24
|
|
ldr r1, _0803C1FC
|
|
lsrs r0, 22
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_0803C1FC: .4byte gUnknown_80E8BF8
|
|
thumb_func_end sub_803C1F0
|
|
|
|
thumb_func_start sub_803C200
|
|
sub_803C200:
|
|
push {lr}
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
bl sub_803C1B4
|
|
ldr r1, _0803C218
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_0803C218: .4byte gUnknown_80E80A0
|
|
thumb_func_end sub_803C200
|
|
|
|
thumb_func_start sub_803C21C
|
|
sub_803C21C:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
adds r6, r0, 0
|
|
adds r4, r1, 0
|
|
adds r0, r6, 0x4
|
|
ldrb r1, [r6, 0x1]
|
|
bl sub_803C1D0
|
|
lsls r0, 24
|
|
lsrs r2, r0, 24
|
|
movs r0, 0
|
|
str r0, [r4, 0x18]
|
|
movs r3, 0
|
|
movs r1, 0x2
|
|
adds r0, r4, 0
|
|
adds r0, 0x1E
|
|
_0803C23E:
|
|
strb r3, [r0]
|
|
subs r0, 0x1
|
|
subs r1, 0x1
|
|
cmp r1, 0
|
|
bge _0803C23E
|
|
adds r0, r4, 0
|
|
adds r0, 0x20
|
|
movs r1, 0
|
|
strb r1, [r0]
|
|
movs r1, 0xA
|
|
strb r1, [r4, 0x1F]
|
|
ldrb r1, [r6, 0x11]
|
|
adds r3, r0, 0
|
|
cmp r1, 0x9
|
|
bhi _0803C354
|
|
lsls r0, r1, 2
|
|
ldr r1, _0803C268
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_0803C268: .4byte _0803C26C
|
|
.align 2, 0
|
|
_0803C26C:
|
|
.4byte _0803C294
|
|
.4byte _0803C2A2
|
|
.4byte _0803C2B4
|
|
.4byte _0803C2BE
|
|
.4byte _0803C354
|
|
.4byte _0803C2E0
|
|
.4byte _0803C2EE
|
|
.4byte _0803C300
|
|
.4byte _0803C30A
|
|
.4byte _0803C34A
|
|
_0803C294:
|
|
movs r0, 0
|
|
strb r0, [r4, 0x16]
|
|
adds r1, r2, 0x1
|
|
movs r0, 0x64
|
|
muls r0, r1
|
|
str r0, [r4, 0x18]
|
|
b _0803C358
|
|
_0803C2A2:
|
|
movs r0, 0x1
|
|
strb r0, [r4, 0x16]
|
|
adds r1, r2, 0x1
|
|
movs r0, 0x64
|
|
muls r0, r1
|
|
str r0, [r4, 0x18]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
b _0803C358
|
|
_0803C2B4:
|
|
movs r0, 0x2
|
|
strb r0, [r4, 0x16]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
b _0803C358
|
|
_0803C2BE:
|
|
movs r0, 0x3
|
|
strb r0, [r4, 0x16]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
adds r5, r6, 0x4
|
|
adds r7, r4, 0
|
|
adds r7, 0x1D
|
|
_0803C2CC:
|
|
ldrb r1, [r6, 0x1]
|
|
adds r0, r5, 0
|
|
adds r2, r7, 0
|
|
bl sub_803C37C
|
|
ldrb r0, [r4, 0x1C]
|
|
ldrb r1, [r4, 0x1D]
|
|
cmp r0, r1
|
|
beq _0803C2CC
|
|
b _0803C35A
|
|
_0803C2E0:
|
|
movs r0, 0
|
|
strb r0, [r4, 0x16]
|
|
adds r1, r2, 0x1
|
|
movs r0, 0xC8
|
|
muls r0, r1
|
|
str r0, [r4, 0x18]
|
|
b _0803C358
|
|
_0803C2EE:
|
|
movs r0, 0x1
|
|
strb r0, [r4, 0x16]
|
|
adds r1, r2, 0x1
|
|
movs r0, 0xC8
|
|
muls r0, r1
|
|
str r0, [r4, 0x18]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
b _0803C358
|
|
_0803C300:
|
|
movs r0, 0x2
|
|
strb r0, [r4, 0x16]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
b _0803C358
|
|
_0803C30A:
|
|
movs r0, 0x3
|
|
strb r0, [r4, 0x16]
|
|
ldrb r0, [r6, 0x12]
|
|
strb r0, [r4, 0x1C]
|
|
adds r5, r6, 0x4
|
|
adds r7, r4, 0
|
|
adds r7, 0x1D
|
|
movs r0, 0x1E
|
|
adds r0, r4
|
|
mov r8, r0
|
|
_0803C31E:
|
|
ldrb r1, [r6, 0x1]
|
|
adds r0, r5, 0
|
|
adds r2, r7, 0
|
|
bl sub_803C37C
|
|
ldrb r0, [r4, 0x1C]
|
|
ldrb r1, [r4, 0x1D]
|
|
cmp r0, r1
|
|
beq _0803C31E
|
|
_0803C330:
|
|
ldrb r1, [r6, 0x1]
|
|
adds r0, r5, 0
|
|
mov r2, r8
|
|
bl sub_803C37C
|
|
ldrb r0, [r4, 0x1C]
|
|
ldrb r1, [r4, 0x1E]
|
|
cmp r0, r1
|
|
beq _0803C330
|
|
ldrb r0, [r4, 0x1D]
|
|
cmp r0, r1
|
|
beq _0803C330
|
|
b _0803C35A
|
|
_0803C34A:
|
|
movs r0, 0x4
|
|
strb r0, [r4, 0x16]
|
|
ldrb r0, [r6, 0x13]
|
|
strb r0, [r3]
|
|
b _0803C358
|
|
_0803C354:
|
|
movs r0, 0x5
|
|
strb r0, [r4, 0x16]
|
|
_0803C358:
|
|
adds r5, r6, 0x4
|
|
_0803C35A:
|
|
movs r0, 0xC
|
|
ldrsh r1, [r6, r0]
|
|
adds r0, r4, 0
|
|
bl CopyYellowSpeciesNametoBuffer
|
|
ldrh r0, [r6, 0xC]
|
|
strh r0, [r4, 0x14]
|
|
ldrb r1, [r6, 0x1]
|
|
adds r0, r5, 0
|
|
bl sub_803C200
|
|
str r0, [r4, 0x24]
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r0}
|
|
bx r0
|
|
thumb_func_end sub_803C21C
|
|
|
|
thumb_func_start sub_803C37C
|
|
sub_803C37C:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
adds r6, r0, 0
|
|
mov r8, r2
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
bl sub_803C1B4
|
|
adds r7, r0, 0
|
|
adds r0, r6, 0
|
|
adds r1, r7, 0
|
|
bl sub_8090910
|
|
_0803C398:
|
|
movs r5, 0
|
|
adds r0, r6, 0
|
|
adds r1, r7, 0
|
|
bl sub_8090910
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
cmp r4, 0xEA
|
|
bne _0803C3BA
|
|
movs r0, 0
|
|
movs r1, 0x47
|
|
movs r2, 0x1
|
|
bl sub_8001784
|
|
negs r1, r0
|
|
orrs r1, r0
|
|
lsrs r5, r1, 31
|
|
_0803C3BA:
|
|
cmp r4, 0xEB
|
|
bne _0803C3CE
|
|
movs r0, 0
|
|
movs r1, 0x47
|
|
movs r2, 0
|
|
bl sub_8001784
|
|
cmp r0, 0
|
|
beq _0803C3CE
|
|
movs r5, 0x1
|
|
_0803C3CE:
|
|
cmp r5, 0
|
|
bne _0803C398
|
|
mov r0, r8
|
|
strb r4, [r0]
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r0}
|
|
bx r0
|
|
thumb_func_end sub_803C37C
|
|
|
|
thumb_func_start sub_803C3E0
|
|
sub_803C3E0:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
sub sp, 0x54
|
|
adds r7, r0, 0
|
|
movs r6, 0
|
|
ldr r5, _0803C42C
|
|
movs r4, 0
|
|
mov r8, sp
|
|
_0803C3F2:
|
|
movs r1, 0
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C41A
|
|
movs r1, 0x2
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C41A
|
|
mov r0, r8
|
|
adds r0, 0x4
|
|
mov r8, r0
|
|
subs r0, 0x4
|
|
stm r0!, {r4}
|
|
adds r6, 0x1
|
|
_0803C41A:
|
|
adds r5, 0x8
|
|
adds r4, 0x1
|
|
cmp r4, 0x14
|
|
ble _0803C3F2
|
|
ldr r5, _0803C42C
|
|
cmp r6, 0
|
|
bne _0803C430
|
|
movs r0, 0
|
|
b _0803C44E
|
|
.align 2, 0
|
|
_0803C42C: .4byte gUnknown_80E9920
|
|
_0803C430:
|
|
adds r0, r6, 0
|
|
bl RandomCapped
|
|
lsls r0, 2
|
|
add r0, sp
|
|
ldr r4, [r0]
|
|
lsls r0, r4, 3
|
|
adds r5, r0, r5
|
|
ldrh r0, [r5]
|
|
strh r0, [r7, 0xC]
|
|
ldrh r0, [r5, 0x2]
|
|
strh r0, [r7, 0xE]
|
|
movs r0, 0x7
|
|
strb r0, [r7, 0x2]
|
|
movs r0, 0x1
|
|
_0803C44E:
|
|
add sp, 0x54
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803C3E0
|
|
|
|
thumb_func_start sub_803C45C
|
|
sub_803C45C:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
sub sp, 0xB4
|
|
adds r7, r0, 0
|
|
movs r6, 0
|
|
ldr r5, _0803C4CC
|
|
movs r4, 0
|
|
mov r8, sp
|
|
_0803C46E:
|
|
movs r1, 0
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C496
|
|
movs r1, 0x2
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C496
|
|
mov r0, r8
|
|
adds r0, 0x4
|
|
mov r8, r0
|
|
subs r0, 0x4
|
|
stm r0!, {r4}
|
|
adds r6, 0x1
|
|
_0803C496:
|
|
adds r5, 0xC
|
|
adds r4, 0x1
|
|
cmp r4, 0x2C
|
|
ble _0803C46E
|
|
ldr r5, _0803C4CC
|
|
cmp r6, 0
|
|
beq _0803C4E0
|
|
adds r0, r6, 0
|
|
bl RandomCapped
|
|
lsls r0, 2
|
|
add r0, sp
|
|
ldr r4, [r0]
|
|
lsls r0, r4, 1
|
|
adds r0, r4
|
|
lsls r0, 2
|
|
adds r5, r0, r5
|
|
bl Random
|
|
movs r1, 0x10
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _0803C4D0
|
|
ldrh r0, [r5]
|
|
strh r0, [r7, 0xC]
|
|
ldrh r0, [r5, 0x2]
|
|
b _0803C4D6
|
|
.align 2, 0
|
|
_0803C4CC: .4byte gUnknown_80E9F8C
|
|
_0803C4D0:
|
|
ldrh r0, [r5, 0x2]
|
|
strh r0, [r7, 0xC]
|
|
ldrh r0, [r5]
|
|
_0803C4D6:
|
|
strh r0, [r7, 0xE]
|
|
movs r0, 0x8
|
|
strb r0, [r7, 0x2]
|
|
movs r0, 0x1
|
|
b _0803C4E2
|
|
_0803C4E0:
|
|
movs r0, 0
|
|
_0803C4E2:
|
|
add sp, 0xB4
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803C45C
|
|
|
|
thumb_func_start sub_803C4F0
|
|
sub_803C4F0:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
sub sp, 0x18
|
|
adds r7, r0, 0
|
|
movs r6, 0
|
|
ldr r5, _0803C55C
|
|
movs r4, 0
|
|
mov r8, sp
|
|
_0803C502:
|
|
movs r1, 0
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C52A
|
|
movs r1, 0x2
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C52A
|
|
mov r0, r8
|
|
adds r0, 0x4
|
|
mov r8, r0
|
|
subs r0, 0x4
|
|
stm r0!, {r4}
|
|
adds r6, 0x1
|
|
_0803C52A:
|
|
adds r5, 0x4
|
|
adds r4, 0x1
|
|
cmp r4, 0x5
|
|
ble _0803C502
|
|
ldr r5, _0803C55C
|
|
cmp r6, 0
|
|
beq _0803C570
|
|
adds r0, r6, 0
|
|
bl RandomCapped
|
|
lsls r0, 2
|
|
add r0, sp
|
|
ldr r4, [r0]
|
|
lsls r0, r4, 2
|
|
adds r5, r0, r5
|
|
bl Random
|
|
movs r1, 0x10
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _0803C560
|
|
ldrh r0, [r5]
|
|
strh r0, [r7, 0xC]
|
|
ldrh r0, [r5, 0x2]
|
|
b _0803C566
|
|
.align 2, 0
|
|
_0803C55C: .4byte gUnknown_80E8168
|
|
_0803C560:
|
|
ldrh r0, [r5, 0x2]
|
|
strh r0, [r7, 0xC]
|
|
ldrh r0, [r5]
|
|
_0803C566:
|
|
strh r0, [r7, 0xE]
|
|
movs r0, 0x9
|
|
strb r0, [r7, 0x2]
|
|
movs r0, 0x1
|
|
b _0803C572
|
|
_0803C570:
|
|
movs r0, 0
|
|
_0803C572:
|
|
add sp, 0x18
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803C4F0
|
|
|
|
thumb_func_start sub_803C580
|
|
sub_803C580:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
sub sp, 0x54
|
|
adds r6, r0, 0
|
|
movs r7, 0
|
|
ldr r5, _0803C5D8
|
|
movs r0, 0x6
|
|
bl sub_80023E4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C5D2
|
|
movs r4, 0
|
|
mov r8, sp
|
|
_0803C59E:
|
|
movs r1, 0
|
|
ldrsh r0, [r5, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C5C6
|
|
ldrb r0, [r6, 0x4]
|
|
ldrb r1, [r5, 0x2]
|
|
bl xxx_bit_lut_lookup_8091E50
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C5C6
|
|
mov r0, r8
|
|
adds r0, 0x4
|
|
mov r8, r0
|
|
subs r0, 0x4
|
|
stm r0!, {r4}
|
|
adds r7, 0x1
|
|
_0803C5C6:
|
|
adds r5, 0x4
|
|
adds r4, 0x1
|
|
cmp r4, 0x14
|
|
ble _0803C59E
|
|
cmp r7, 0
|
|
bne _0803C5DC
|
|
_0803C5D2:
|
|
movs r0, 0
|
|
b _0803C600
|
|
.align 2, 0
|
|
_0803C5D8: .4byte gUnknown_80E8180
|
|
_0803C5DC:
|
|
adds r0, r7, 0
|
|
bl RandomCapped
|
|
lsls r0, 2
|
|
add r0, sp
|
|
ldr r4, [r0]
|
|
lsls r1, r4, 2
|
|
ldr r0, _0803C60C
|
|
adds r5, r1, r0
|
|
ldrh r0, [r5]
|
|
strh r0, [r6, 0xC]
|
|
ldrh r0, [r5]
|
|
strh r0, [r6, 0xE]
|
|
ldrb r0, [r5, 0x2]
|
|
strb r0, [r6, 0x10]
|
|
movs r0, 0x5
|
|
strb r0, [r6, 0x2]
|
|
movs r0, 0x1
|
|
_0803C600:
|
|
add sp, 0x54
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_0803C60C: .4byte gUnknown_80E8180
|
|
thumb_func_end sub_803C580
|
|
|
|
thumb_func_start sub_803C610
|
|
sub_803C610:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
ldr r4, _0803C660
|
|
add sp, r4
|
|
adds r6, r0, 0
|
|
movs r7, 0
|
|
ldr r4, _0803C664
|
|
movs r5, 0
|
|
mov r8, sp
|
|
_0803C624:
|
|
movs r1, 0
|
|
ldrsh r0, [r4, r1]
|
|
bl sub_803C110
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C64C
|
|
ldrb r0, [r6, 0x4]
|
|
ldrb r1, [r4, 0x2]
|
|
bl xxx_bit_lut_lookup_8091E50
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _0803C64C
|
|
mov r0, r8
|
|
adds r0, 0x4
|
|
mov r8, r0
|
|
subs r0, 0x4
|
|
stm r0!, {r5}
|
|
adds r7, 0x1
|
|
_0803C64C:
|
|
adds r4, 0x4
|
|
adds r5, 0x1
|
|
ldr r0, _0803C668
|
|
cmp r5, r0
|
|
ble _0803C624
|
|
cmp r7, 0
|
|
bne _0803C66C
|
|
movs r0, 0
|
|
b _0803C690
|
|
.align 2, 0
|
|
_0803C660: .4byte 0xfffff9f8
|
|
_0803C664: .4byte gUnknown_80E81D4
|
|
_0803C668: .4byte 0x00000181
|
|
_0803C66C:
|
|
adds r0, r7, 0
|
|
bl RandomCapped
|
|
lsls r0, 2
|
|
add r0, sp
|
|
ldr r5, [r0]
|
|
lsls r1, r5, 2
|
|
ldr r0, _0803C6A0
|
|
adds r4, r1, r0
|
|
ldrh r0, [r4]
|
|
strh r0, [r6, 0xC]
|
|
ldrh r0, [r4]
|
|
strh r0, [r6, 0xE]
|
|
ldrb r0, [r4, 0x2]
|
|
strb r0, [r6, 0x10]
|
|
movs r0, 0x6
|
|
strb r0, [r6, 0x2]
|
|
movs r0, 0x1
|
|
_0803C690:
|
|
movs r3, 0xC1
|
|
lsls r3, 3
|
|
add sp, r3
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_0803C6A0: .4byte gUnknown_80E81D4
|
|
thumb_func_end sub_803C610
|
|
|
|
.align 2,0
|