pmd-red/asm/code_8002774.s
2023-09-07 08:02:15 -04:00

1040 lines
14 KiB
ArmAsm

#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8002774
sub_8002774:
sub sp, 0x4
str r0, [sp]
mov r0, sp
ldrb r1, [r0, 0x2]
movs r0, 0xF8
adds r2, r0, 0
ands r2, r1
lsls r2, 7
mov r1, sp
ldrb r3, [r1, 0x1]
adds r1, r0, 0
ands r1, r3
lsls r1, 2
orrs r2, r1
mov r1, sp
ldrb r1, [r1]
ands r0, r1
lsrs r0, 3
orrs r0, r2
add sp, 0x4
bx lr
thumb_func_end sub_8002774
thumb_func_start sub_80027A0
sub_80027A0:
push {r4,lr}
sub sp, 0x4
lsls r0, 16
lsrs r2, r0, 16
adds r3, r2, 0
mov r4, sp
movs r0, 0x1F
ands r0, r2
lsls r1, r0, 3
movs r0, 0x1
ands r0, r2
cmp r0, 0
beq _080027BE
movs r0, 0x7
orrs r1, r0
_080027BE:
strb r1, [r4]
mov r4, sp
movs r0, 0xF8
lsls r0, 2
ands r0, r2
lsrs r1, r0, 2
movs r0, 0x20
ands r0, r2
cmp r0, 0
beq _080027D6
movs r0, 0x7
orrs r1, r0
_080027D6:
strb r1, [r4, 0x1]
mov r2, sp
movs r0, 0xF8
lsls r0, 7
ands r0, r3
lsrs r1, r0, 7
movs r0, 0x80
lsls r0, 3
ands r3, r0
cmp r3, 0
beq _080027F0
movs r0, 0x7
orrs r1, r0
_080027F0:
strb r1, [r2, 0x2]
mov r0, sp
movs r1, 0
strb r1, [r0, 0x3]
ldr r0, [sp]
add sp, 0x4
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80027A0
thumb_func_start sub_8002804
sub_8002804:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r3, 0
_0800280C:
adds r1, r5, r3
adds r0, r2, r3
ldrb r0, [r0]
muls r0, r4
cmp r0, 0
bge _0800281A
adds r0, 0xFF
_0800281A:
asrs r0, 8
strb r0, [r1]
adds r3, 0x1
cmp r3, 0x3
ble _0800280C
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8002804
thumb_func_start sub_800282C
sub_800282C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x38
mov r9, r0
str r1, [sp, 0x20]
adds r7, r2, 0
mov r8, r3
adds r0, r1, 0
bl __floatsisf
adds r1, r0, 0
ldr r0, _08002904
bl __divsf3
str r0, [sp, 0x24]
movs r5, 0
mov r0, sp
adds r0, 0x10
str r0, [sp, 0x2C]
str r0, [sp, 0x34]
mov r10, sp
_0800285C:
adds r6, r7, r5
movs r4, 0
ldrsb r4, [r6, r4]
adds r0, r4, 0
bl __floatsisf
cmp r4, 0
bge _08002872
ldr r1, _08002908
bl __addsf3
_08002872:
mov r1, r10
adds r1, 0x4
mov r10, r1
subs r1, 0x4
stm r1!, {r0}
mov r1, r8
adds r0, r1, r5
ldrb r0, [r0]
ldrb r1, [r6]
subs r0, r1
bl __floatsisf
ldr r1, [sp, 0x24]
bl __mulsf3
ldr r1, [sp, 0x34]
stm r1!, {r0}
str r1, [sp, 0x34]
adds r5, 0x1
cmp r5, 0x3
ble _0800285C
ldr r0, [r7]
mov r1, r9
adds r1, 0x4
mov r9, r1
subs r1, 0x4
stm r1!, {r0}
movs r5, 0x1
ldr r0, [sp, 0x20]
subs r0, 0x1
str r0, [sp, 0x28]
mov r1, r8
ldr r1, [r1]
str r1, [sp, 0x30]
cmp r5, r0
bge _080028EE
_080028BA:
movs r6, 0
adds r5, 0x1
mov r10, r5
movs r0, 0x4
add r0, r9
mov r8, r0
mov r5, sp
ldr r7, [sp, 0x2C]
_080028CA:
mov r1, r9
adds r4, r1, r6
ldr r0, [r5]
ldm r7!, {r1}
bl __addsf3
stm r5!, {r0}
bl __fixunssfsi
strb r0, [r4]
adds r6, 0x1
cmp r6, 0x3
ble _080028CA
mov r9, r8
mov r5, r10
ldr r0, [sp, 0x28]
cmp r5, r0
blt _080028BA
_080028EE:
ldr r1, [sp, 0x30]
mov r0, r9
str r1, [r0]
add sp, 0x38
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08002904: .4byte 0x3f800000
_08002908: .4byte 0x43800000
thumb_func_end sub_800282C
thumb_func_start sub_800290C
sub_800290C:
push {lr}
ldr r3, [r0]
cmp r3, r1
ble _08002918
str r1, [r0]
b _08002920
_08002918:
negs r2, r1
cmp r3, r2
bge _08002920
str r2, [r0]
_08002920:
ldr r2, [r0, 0x4]
cmp r2, r1
bgt _0800292C
negs r1, r1
cmp r2, r1
bge _0800292E
_0800292C:
str r1, [r0, 0x4]
_0800292E:
pop {r0}
bx r0
thumb_func_end sub_800290C
thumb_func_start sub_8002934
sub_8002934:
push {r4-r6,lr}
mov r6, r10
mov r5, r9
mov r4, r8
push {r4-r6}
mov r10, r0
adds r6, r1, 0
mov r8, r2
adds r4, r3, 0
ldr r5, [sp, 0x1C]
adds r0, r4, r5
mov r9, r0
ldr r0, [r6]
muls r0, r4
ldr r1, [r2]
muls r1, r5
adds r0, r1
mov r1, r9
bl __divsi3
mov r1, r10
str r0, [r1]
ldr r0, [r6, 0x4]
muls r0, r4
mov r2, r8
ldr r1, [r2, 0x4]
muls r1, r5
adds r0, r1
mov r1, r9
bl __divsi3
mov r1, r10
str r0, [r1, 0x4]
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_8002934
thumb_func_start sub_8002984
sub_8002984:
push {r4,lr}
lsls r0, 24
asrs r4, r0, 24
lsls r1, 24
lsrs r1, 24
subs r0, r1, 0x1
cmp r0, 0x8
bhi _08002A68
lsls r0, 2
ldr r1, _080029A0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080029A0: .4byte _080029A4
.align 2, 0
_080029A4:
.4byte _080029C8
.4byte _080029D0
.4byte _080029D8
.4byte _080029E0
.4byte _080029E8
.4byte _080029F4
.4byte _08002A34
.4byte _08002A4E
.4byte _08002A5E
_080029C8:
cmp r4, 0
blt _08002A68
adds r4, 0x7
b _080029EE
_080029D0:
cmp r4, 0
blt _08002A68
adds r4, 0x1
b _080029EE
_080029D8:
cmp r4, 0
blt _08002A68
adds r4, 0x6
b _080029EE
_080029E0:
cmp r4, 0
blt _08002A68
adds r4, 0x2
b _080029EE
_080029E8:
cmp r4, 0
blt _08002A68
adds r4, 0x4
_080029EE:
movs r0, 0x7
ands r4, r0
b _08002A68
_080029F4:
movs r0, 0x1
ands r0, r4
cmp r0, 0
beq _08002A18
movs r0, 0x2
bl OtherRandInt
adds r1, r4, 0x7
lsls r0, 1
adds r1, r0
adds r0, r1, 0
cmp r1, 0
bge _08002A10
adds r0, r1, 0x7
_08002A10:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
b _08002A64
_08002A18:
movs r0, 0x3
bl OtherRandInt
adds r1, r4, 0x6
lsls r0, 1
adds r1, r0
adds r0, r1, 0
cmp r1, 0
bge _08002A2C
adds r0, r1, 0x7
_08002A2C:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
b _08002A64
_08002A34:
movs r0, 0x3
bl OtherRandInt
adds r1, r4, 0x7
adds r1, r0
adds r0, r1, 0
cmp r1, 0
bge _08002A46
adds r0, r1, 0x7
_08002A46:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
b _08002A64
_08002A4E:
movs r0, 0x8
bl OtherRandInt
movs r2, 0x2
negs r2, r2
adds r1, r2, 0
ands r0, r1
b _08002A64
_08002A5E:
movs r0, 0x8
bl OtherRandInt
_08002A64:
lsls r0, 24
asrs r4, r0, 24
_08002A68:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8002984
@ https://decomp.me/scratch/HXC9z
@ https://decomp.me/scratch/BWmWQ
@ https://decomp.me/scratch/QfX03
thumb_func_start sub_8002A70
sub_8002A70:
push {r4,lr}
lsls r0, 24
asrs r3, r0, 24
lsls r1, 24
asrs r4, r1, 24
lsls r2, 24
lsrs r0, r2, 24
cmp r3, r4
beq _08002AFC
subs r0, 0x1
cmp r0, 0xA
bhi _08002AFC
lsls r0, 2
ldr r1, _08002A94
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08002A94: .4byte _08002A98
.align 2, 0
_08002A98:
.4byte _08002AC4
.4byte _08002ACC
.4byte _08002AD4
.4byte _08002ADC
.4byte _08002AFC
.4byte _08002AFC
.4byte _08002AFC
.4byte _08002AFC
.4byte _08002AFC
.4byte _08002AF2
.4byte _08002AE8
_08002AC4:
cmp r3, 0
blt _08002AFC
adds r3, 0x7
b _08002AE2
_08002ACC:
cmp r3, 0
blt _08002AFC
adds r3, 0x1
b _08002AE2
_08002AD4:
cmp r3, 0
blt _08002AFC
adds r3, 0x6
b _08002AE2
_08002ADC:
cmp r3, 0
blt _08002AFC
adds r3, 0x2
_08002AE2:
movs r0, 0x7
ands r3, r0
b _08002AFC
_08002AE8:
adds r0, r3, 0
adds r1, r4, 0
bl sub_8002B04
adds r3, r0, 0
_08002AF2:
adds r0, r3, 0
adds r1, r4, 0
bl sub_8002B04
adds r3, r0, 0
_08002AFC:
adds r0, r3, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8002A70
@ https://decomp.me/scratch/oCt37
@ https://decomp.me/scratch/ZTHtV [Probably the correct one]
thumb_func_start sub_8002B04
sub_8002B04:
push {lr}
lsls r0, 24
asrs r2, r0, 24
lsls r1, 24
asrs r1, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _08002B56
adds r0, r2, 0
subs r0, 0x8
subs r1, r0
adds r0, r1, 0
cmp r1, 0
bge _08002B24
adds r0, r1, 0x7
_08002B24:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
cmp r0, 0
beq _08002B56
cmp r0, 0x3
bgt _08002B40
adds r1, r2, 0x1
adds r0, r1, 0
cmp r1, 0
bge _08002B4C
adds r0, r2, 0
adds r0, 0x8
b _08002B4C
_08002B40:
adds r1, r2, 0x7
adds r0, r1, 0
cmp r1, 0
bge _08002B4C
adds r0, r2, 0
adds r0, 0xE
_08002B4C:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
lsls r0, 24
asrs r2, r0, 24
_08002B56:
adds r0, r2, 0
pop {r1}
bx r1
thumb_func_end sub_8002B04
thumb_func_start sub_8002B5C
sub_8002B5C:
push {lr}
lsls r0, 24
asrs r2, r0, 24
lsls r1, 24
asrs r1, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _08002BAE
adds r0, r2, 0
subs r0, 0x8
subs r1, r0
adds r0, r1, 0
cmp r1, 0
bge _08002B7C
adds r0, r1, 0x7
_08002B7C:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
cmp r0, 0
beq _08002BAE
cmp r0, 0x3
bgt _08002B98
adds r1, r2, 0x2
adds r0, r1, 0
cmp r1, 0
bge _08002BA4
adds r0, r2, 0
adds r0, 0x9
b _08002BA4
_08002B98:
adds r1, r2, 0x6
adds r0, r1, 0
cmp r1, 0
bge _08002BA4
adds r0, r2, 0
adds r0, 0xD
_08002BA4:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
lsls r0, 24
asrs r2, r0, 24
_08002BAE:
movs r0, 0x6
ands r2, r0
adds r0, r2, 0
pop {r1}
bx r1
thumb_func_end sub_8002B5C
thumb_func_start sub_8002BB8
sub_8002BB8:
push {r4,r5,lr}
lsls r1, 24
asrs r1, 21
ldr r3, _08002BD8
adds r1, r3
ldr r5, [r1]
adds r3, r5, 0
muls r3, r2
ldr r1, [r1, 0x4]
adds r4, r1, 0
muls r4, r2
str r3, [r0]
str r4, [r0, 0x4]
pop {r4,r5}
pop {r2}
bx r2
.align 2, 0
_08002BD8: .4byte gUnknown_80B7E3C
thumb_func_end sub_8002BB8
thumb_func_start sub_8002BDC
sub_8002BDC:
push {lr}
ldr r1, [r0]
cmp r1, 0
bge _08002BFA
ldr r0, [r0, 0x4]
cmp r0, 0
bge _08002BEE
movs r0, 0x5
b _08002C2A
_08002BEE:
cmp r0, 0
ble _08002BF6
movs r0, 0x7
b _08002C2A
_08002BF6:
movs r0, 0x6
b _08002C2A
_08002BFA:
cmp r1, 0
ble _08002C14
ldr r0, [r0, 0x4]
cmp r0, 0
bge _08002C08
movs r0, 0x3
b _08002C2A
_08002C08:
cmp r0, 0
ble _08002C10
movs r0, 0x1
b _08002C2A
_08002C10:
movs r0, 0x2
b _08002C2A
_08002C14:
ldr r0, [r0, 0x4]
cmp r0, 0
bge _08002C1E
movs r0, 0x4
b _08002C2A
_08002C1E:
cmp r0, 0
bgt _08002C28
movs r0, 0x1
negs r0, r0
b _08002C2A
_08002C28:
movs r0, 0
_08002C2A:
pop {r1}
bx r1
thumb_func_end sub_8002BDC
thumb_func_start sub_8002C30
sub_8002C30:
push {lr}
ldr r1, [r0, 0x4]
cmp r1, 0
bge _08002C3C
movs r0, 0x4
b _08002C5A
_08002C3C:
cmp r1, 0
ble _08002C44
movs r0, 0
b _08002C5A
_08002C44:
ldr r0, [r0]
cmp r0, 0
bge _08002C4E
movs r0, 0x6
b _08002C5A
_08002C4E:
cmp r0, 0
bgt _08002C58
movs r0, 0x1
negs r0, r0
b _08002C5A
_08002C58:
movs r0, 0x2
_08002C5A:
pop {r1}
bx r1
thumb_func_end sub_8002C30
thumb_func_start sub_8002C60
sub_8002C60:
push {r4,r5,lr}
adds r4, r0, 0
ldr r0, [r4]
cmp r0, 0
bge _08002C6C
negs r0, r0
_08002C6C:
adds r1, r0, 0
ldr r3, [r4, 0x4]
adds r5, r3, 0
cmp r3, 0
bge _08002C78
negs r5, r3
_08002C78:
adds r2, r5, 0
ldr r4, [r4]
cmp r4, 0
bge _08002CA8
cmp r3, 0
bge _08002C94
lsls r0, 1
cmp r2, r0
bgt _08002CD8
lsls r0, r5, 1
cmp r1, r0
bgt _08002CA0
movs r0, 0x5
b _08002CE8
_08002C94:
lsls r0, 1
cmp r2, r0
bgt _08002CE6
lsls r0, r5, 1
cmp r1, r0
ble _08002CA4
_08002CA0:
movs r0, 0x6
b _08002CE8
_08002CA4:
movs r0, 0x7
b _08002CE8
_08002CA8:
cmp r4, 0
ble _08002CD4
cmp r3, 0
bge _08002CC0
lsls r0, 1
cmp r2, r0
bgt _08002CD8
lsls r0, r5, 1
cmp r1, r0
bgt _08002CCC
movs r0, 0x3
b _08002CE8
_08002CC0:
lsls r0, 1
cmp r2, r0
bgt _08002CE6
lsls r0, r5, 1
cmp r1, r0
ble _08002CD0
_08002CCC:
movs r0, 0x2
b _08002CE8
_08002CD0:
movs r0, 0x1
b _08002CE8
_08002CD4:
cmp r3, 0
bge _08002CDC
_08002CD8:
movs r0, 0x4
b _08002CE8
_08002CDC:
cmp r3, 0
bgt _08002CE6
movs r0, 0x1
negs r0, r0
b _08002CE8
_08002CE6:
movs r0, 0
_08002CE8:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8002C60
thumb_func_start sub_8002CF0
sub_8002CF0:
push {r4,lr}
adds r4, r0, 0
ldr r3, [r4]
cmp r3, 0
bge _08002CFC
negs r3, r3
_08002CFC:
adds r1, r3, 0
ldr r3, [r4, 0x4]
adds r0, r3, 0
cmp r3, 0
bge _08002D08
negs r0, r3
_08002D08:
adds r2, r0, 0
ldr r0, [r4]
cmp r0, 0
bge _08002D22
cmp r3, 0
bge _08002D1A
cmp r2, r1
bgt _08002D3C
b _08002D1E
_08002D1A:
cmp r2, r1
bgt _08002D4A
_08002D1E:
movs r0, 0x6
b _08002D4C
_08002D22:
cmp r0, 0
ble _08002D38
cmp r3, 0
bge _08002D30
cmp r2, r1
bgt _08002D3C
b _08002D34
_08002D30:
cmp r2, r1
bgt _08002D4A
_08002D34:
movs r0, 0x2
b _08002D4C
_08002D38:
cmp r3, 0
bge _08002D40
_08002D3C:
movs r0, 0x4
b _08002D4C
_08002D40:
cmp r3, 0
bgt _08002D4A
movs r0, 0x1
negs r0, r0
b _08002D4C
_08002D4A:
movs r0, 0
_08002D4C:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8002CF0
thumb_func_start sub_8002D54
sub_8002D54:
push {r4,r5,lr}
sub sp, 0x8
adds r4, r1, 0
adds r5, r3, 0
ldr r3, [r2]
ldr r1, [r0]
subs r3, r1
str r3, [sp]
ldr r1, [r2, 0x4]
ldr r0, [r0, 0x4]
subs r1, r0
str r1, [sp, 0x4]
adds r2, r3, 0
cmp r2, 0
blt _08002D8A
adds r2, 0x1
ldr r0, [r4]
ldr r1, [r5]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
subs r2, r0
str r2, [sp]
cmp r2, 0
bge _08002DA4
b _08002DA0
_08002D8A:
subs r2, r3, 0x1
ldr r0, [r4]
ldr r1, [r5]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
adds r2, r0
str r2, [sp]
cmp r2, 0
ble _08002DA4
_08002DA0:
movs r0, 0
str r0, [sp]
_08002DA4:
ldr r2, [sp, 0x4]
cmp r2, 0
blt _08002DC2
adds r2, 0x1
ldr r0, [r4, 0x4]
ldr r1, [r5, 0x4]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
subs r2, r0
str r2, [sp, 0x4]
cmp r2, 0
bge _08002DDC
b _08002DD8
_08002DC2:
subs r2, 0x1
ldr r0, [r4, 0x4]
ldr r1, [r5, 0x4]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
adds r2, r0
str r2, [sp, 0x4]
cmp r2, 0
ble _08002DDC
_08002DD8:
movs r0, 0
str r0, [sp, 0x4]
_08002DDC:
mov r0, sp
bl sub_8002CF0
lsls r0, 24
asrs r0, 24
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8002D54
thumb_func_start sub_8002DF0
sub_8002DF0:
push {r4,r5,lr}
sub sp, 0x8
adds r4, r1, 0
adds r5, r3, 0
ldr r3, [r2]
ldr r1, [r0]
subs r3, r1
str r3, [sp]
ldr r1, [r2, 0x4]
ldr r0, [r0, 0x4]
subs r1, r0
str r1, [sp, 0x4]
adds r2, r3, 0
cmp r2, 0
blt _08002E26
adds r2, 0x1
ldr r0, [r4]
ldr r1, [r5]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
subs r2, r0
str r2, [sp]
cmp r2, 0
bge _08002E40
b _08002E3C
_08002E26:
subs r2, r3, 0x1
ldr r0, [r4]
ldr r1, [r5]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
adds r2, r0
str r2, [sp]
cmp r2, 0
ble _08002E40
_08002E3C:
movs r0, 0
str r0, [sp]
_08002E40:
ldr r2, [sp, 0x4]
cmp r2, 0
blt _08002E5E
adds r2, 0x1
ldr r0, [r4, 0x4]
ldr r1, [r5, 0x4]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
subs r2, r0
str r2, [sp, 0x4]
cmp r2, 0
bge _08002E78
b _08002E74
_08002E5E:
subs r2, 0x1
ldr r0, [r4, 0x4]
ldr r1, [r5, 0x4]
adds r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
adds r2, r0
str r2, [sp, 0x4]
cmp r2, 0
ble _08002E78
_08002E74:
movs r0, 0
str r0, [sp, 0x4]
_08002E78:
mov r0, sp
bl sub_8002C60
lsls r0, 24
asrs r0, 24
add sp, 0x8
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8002DF0
.align 2, 0 @ Don't pad with nop.