move handwritten asm to src

This commit is contained in:
theo3
2022-03-16 19:15:58 -07:00
parent f431f7def4
commit 2fe33a05b8
15 changed files with 49 additions and 75 deletions
+91
View File
@@ -0,0 +1,91 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_08000E44
sub_08000E44: @ 0x08000E44
cmp r0, #0
beq _08000E4E
asrs r0, r0, #0x1f
bmi _08000E4E
movs r0, #1
_08000E4E:
bx lr
thumb_func_start Random
Random: @ 0x08000E50
ldr r2, _08000EBC @ =gRand
ldr r0, [r2]
lsls r1, r0, #1
adds r0, r0, r1
movs r1, #0xd
rors r0, r1
str r0, [r2]
lsrs r0, r0, #1
bx lr
non_word_aligned_thumb_func_start sub_08000E62
sub_08000E62: @ 0x08000E62
lsrs r1, r0, #1
ldr r2, _08000EC0 @ =0x55555555
ands r0, r2
ands r1, r2
adds r0, r0, r1
lsrs r1, r0, #2
ldr r2, _08000EC4 @ =0x33333333
ands r0, r2
ands r1, r2
adds r0, r0, r1
lsrs r1, r0, #4
ldr r2, _08000EC8 @ =0x0F0F0F0F
ands r0, r2
ands r1, r2
adds r0, r0, r1
lsrs r1, r0, #8
ldr r2, _08000ECC @ =0x00FF00FF
ands r0, r2
ands r1, r2
adds r0, r0, r1
lsls r1, r0, #0x10
adds r0, r0, r1
lsrs r0, r0, #0x10
bx lr
non_word_aligned_thumb_func_start sub_08000E92
sub_08000E92: @ 0x08000E92
movs r3, #1
b _08000E98
non_word_aligned_thumb_func_start LoadResourceAsync
LoadResourceAsync: @ 0x08000E96
movs r3, #0
_08000E98:
push {r4, r5}
ldr r5, _08000ED0 @ =gUnk_03003DE0
ldrb r4, [r5]
cmp r4, #0x28
bhs _08000EB6
adds r4, #1
strb r4, [r5]
movs r5, #0xc
muls r4, r5, r4
ldr r5, _08000ED4 @ =gUnk_03000C24
adds r4, r4, r5
strb r3, [r4]
strh r2, [r4, #2]
str r0, [r4, #4]
str r1, [r4, #8]
_08000EB6:
pop {r4, r5}
bx lr
.align 2, 0
_08000EBC: .4byte gRand
_08000EC0: .4byte 0x55555555
_08000EC4: .4byte 0x33333333
_08000EC8: .4byte 0x0F0F0F0F
_08000ECC: .4byte 0x00FF00FF
_08000ED0: .4byte gUnk_03003DE0
_08000ED4: .4byte gUnk_03000C24
+51
View File
@@ -0,0 +1,51 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start CheckBits
CheckBits: @ 0x08000F10
ldr r3, _08000F50 @ =ram_CheckBits
bx r3
thumb_func_start sub_08000F14
sub_08000F14: @ 0x08000F14
push {r4, r5, r6}
movs r4, #0x1e
_08000F18:
ldrsh r5, [r1, r4]
ldrsh r6, [r2, r4]
adds r5, r5, r6
ldrsh r6, [r3, r4]
adds r5, r5, r6
strh r5, [r0, r4]
subs r4, #2
bpl _08000F18
pop {r4, r5, r6}
bx lr
thumb_func_start sub_08000F2C
sub_08000F2C: @ 0x08000F2C
push {r4, r5, r6, r7}
movs r4, #0x1e
movs r7, #0
_08000F32:
ldrsh r5, [r1, r4]
ldrsh r6, [r2, r4]
adds r5, r5, r6
ldrsh r6, [r3, r4]
adds r5, r5, r6
bpl _08000F40
movs r5, #0
_08000F40:
strh r5, [r0, r4]
adds r7, r7, r5
subs r4, #2
bpl _08000F32
adds r0, r7, #0
pop {r4, r5, r6, r7}
bx lr
.align 2, 0
_08000F50: .4byte ram_CheckBits
File diff suppressed because it is too large Load Diff
+677
View File
@@ -0,0 +1,677 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start GravityUpdate
GravityUpdate: @ 0x08003FC4
@ r0 = Entity*
@ r1 = Gravity strength
@ returns z pos
adds r3, r0, #0
ldr r0, [r3, #0x34]
ldr r2, [r3, #0x20]
subs r0, r0, r2
bpl _08003FD6
subs r2, r2, r1
str r0, [r3, #0x34]
str r2, [r3, #0x20]
bx lr
_08003FD6:
movs r0, #0
str r0, [r3, #0x34]
str r0, [r3, #0x20]
bx lr
non_word_aligned_thumb_func_start sub_08003FDE
sub_08003FDE: @ 0x08003FDE
push {r0, lr}
bl sub_08003FF2
cmp r0, #0
pop {r2}
beq _08003FF0
adds r0, r2, #0
bl sub_0806F58C
_08003FF0:
pop {pc}
non_word_aligned_thumb_func_start sub_08003FF2
sub_08003FF2: @ 0x08003FF2
push {r4, r5, r6, r7, lr}
ldr r4, [r1, #0x48]
ldrb r5, [r4, #6]
ldrb r6, [r4, #7]
adds r2, r2, r5
adds r3, r3, r6
ldrh r5, [r1, #0x2e]
movs r7, #0
ldrsb r7, [r4, r7]
ldrb r6, [r1, #0x18]
lsrs r6, r6, #3
blo _0800400C
rsbs r7, r7, #0
_0800400C:
adds r5, r5, r7
ldrh r6, [r1, #0x32]
movs r7, #1
ldrsb r7, [r4, r7]
adds r6, r6, r7
movs r4, #0x38
ldrb r7, [r0, r4]
ldrb r4, [r1, r4]
ands r7, r4
movs r4, #3
cmp r7, r4
beq _08004048
cmp r2, #0
beq _08004034
ldrh r4, [r0, #0x2e]
subs r4, r4, r5
adds r4, r4, r2
lsls r2, r2, #1
cmp r2, r4
blo _08004048
_08004034:
cmp r3, #0
beq _08004044
ldrh r4, [r0, #0x32]
subs r4, r4, r6
adds r4, r4, r3
lsls r3, r3, #1
cmp r3, r4
blo _08004048
_08004044:
movs r0, #1
pop {r4, r5, r6, r7, pc}
_08004048:
movs r0, #0
pop {r4, r5, r6, r7, pc}
thumb_func_start DrawEntity
DrawEntity: @ 0x0800404C
push {r4, r5, lr}
adds r4, r0, #0
ldrb r1, [r0, #0x18]
movs r2, #3
ands r1, r2
beq _0800409A
cmp r1, #3
beq _08004064
bl sub_080040A2
cmp r0, #0
beq _0800409A
_08004064:
ldrb r1, [r4, #0x19]
movs r2, #0xc0
ands r1, r2
lsrs r1, r1, #4
ldr r2, _08004358 @ =gUnk_081326EC
ldr r1, [r2, r1]
ldrb r2, [r1]
cmp r2, #0x40
bhs _0800407E
adds r2, #1
strb r2, [r1]
lsls r2, r2, #2
str r4, [r1, r2]
_0800407E:
movs r2, #0
ldr r1, _0800435C @ =gUnk_02024048
ldrb r5, [r1]
strb r2, [r1]
cmp r5, #0
beq _080040A0
ldr r4, _08004360 @ =gUnk_02021F20
_0800408C:
ldrh r0, [r4]
bl SoundReq
adds r4, #2
subs r5, #1
bne _0800408C
pop {r4, r5, pc}
_0800409A:
ldr r1, _08004364 @ =gUnk_02024048
movs r2, #0
strb r2, [r1]
_080040A0:
pop {r4, r5, pc}
non_word_aligned_thumb_func_start sub_080040A2
sub_080040A2: @ 0x080040A2
ldrb r1, [r0, #0x18]
lsrs r1, r1, #2
bhs _080040D0
thumb_func_start CheckOnScreen
CheckOnScreen: @ 0x080040A8
ldr r1, _08004368 @ =gRoomControls
movs r2, #0x2e
ldrsh r2, [r0, r2]
ldrh r3, [r1, #0xa]
subs r2, r2, r3
adds r2, #0x3f
ldr r3, _0800436C @ =0x0000016E
cmp r2, r3
bhs _080040D4
movs r2, #0x32
ldrsh r2, [r0, r2]
ldrh r3, [r1, #0xc]
subs r2, r2, r3
movs r3, #0x36
ldrsh r3, [r0, r3]
adds r2, r2, r3
adds r2, #0x3f
ldr r3, _08004370 @ =0x0000011E
cmp r2, r3
bhs _080040D4
_080040D0:
movs r0, #1
bx lr
_080040D4:
movs r0, #0
bx lr
thumb_func_start sub_080040D8
sub_080040D8: @ 0x080040D8
push {lr}
bl _080040F2
adds r0, r2, #0
pop {pc}
non_word_aligned_thumb_func_start sub_080040E2
sub_080040E2: @ 0x080040E2
push {lr}
bl sub_080040EC
adds r0, r2, #0
pop {pc}
thumb_func_start sub_080040EC
sub_080040EC: @ 0x080040EC
ldrh r2, [r0, #0x2e]
ldrh r3, [r0, #0x32]
b _080040F2
_080040F2:
push {r2, r3, r4, lr}
ldr r4, _08004374 @ =gRoomControls + 6
ldrh r4, [r4]
subs r2, r2, r4
ldr r4, _08004378 @ =gRoomControls + 8
ldrh r4, [r4]
subs r3, r3, r4
ldr r4, _0800437C @ =0x000003F0
ands r2, r4
ands r3, r4
lsrs r2, r2, #4
lsls r3, r3, #2
adds r2, r2, r3
movs r3, #0x38
ldrb r3, [r0, r3]
lsls r3, r3, #2
ldr r4, _08004380 @ =gUnk_08000248
ldr r3, [r4, r3]
ldrb r4, [r3, r2]
pop {r2, r3}
cmp r4, #0x10
bhs _0800412C
lsrs r3, r3, #4
bhs _08004124
lsrs r4, r4, #2
_08004124:
lsrs r2, r2, #4
bhs _08004162
lsrs r4, r4, #1
b _08004162
_0800412C:
cmp r4, #0xff
beq _08004162
subs r4, #0x10
lsls r4, r4, #1
ldrh r4, [r1, r4]
movs r1, #0xf
ands r1, r2
cmp r1, #4
blo _0800414C
lsrs r4, r4, #1
cmp r1, #8
blo _0800414C
lsrs r4, r4, #1
cmp r1, #0xc
blo _0800414C
lsrs r4, r4, #1
_0800414C:
movs r1, #0xf
ands r1, r3
cmp r1, #4
blo _08004162
lsrs r4, r4, #4
cmp r1, #8
blo _08004162
lsrs r4, r4, #4
cmp r1, #0xc
blo _08004162
lsrs r4, r4, #4
_08004162:
movs r2, #1
ands r2, r4
pop {r4, pc}
thumb_func_start sub_08004168
sub_08004168: @ 0x08004168
ldr r3, _08004384 @ =0x000FFFFF
ldr r1, _08004388 @ =0x00080000
ldr r2, [r0, #0x2c]
bics r2, r3
adds r2, r2, r1
str r2, [r0, #0x2c]
ldr r2, [r0, #0x30]
bics r2, r3
adds r2, r2, r1
str r2, [r0, #0x30]
bx lr
non_word_aligned_thumb_func_start sub_0800417E
sub_0800417E: @ 0x0800417E
ldrb r2, [r0, #0x15]
ldr r3, _0800438C @ =0x0000EE00
tst r1, r3
beq _0800418A
movs r3, #0x20
subs r2, r3, r2
_0800418A:
movs r3, #0xee
tst r1, r3
beq _08004194
movs r3, #0x10
subs r2, r3, r2
_08004194:
movs r3, #0x1f
ands r2, r3
strb r2, [r0, #0x15]
bx lr
thumb_func_start sub_0800419C
sub_0800419C: @ 0x0800419C
push {r5, r6, lr}
b _080041B0
thumb_func_start EntityInRectRadius
EntityInRectRadius: @ 0x080041A0
push {r5, r6, lr}
movs r6, #0x38
ldrb r5, [r0, r6]
ldrb r6, [r1, r6]
ands r5, r6
movs r6, #3
tst r5, r6
beq _080041D8
_080041B0:
cmp r2, #0
beq _080041C2
ldrh r5, [r0, #0x2e]
ldrh r6, [r1, #0x2e]
subs r5, r5, r6
adds r5, r5, r2
lsls r2, r2, #1
cmp r2, r5
blo _080041D8
_080041C2:
cmp r3, #0
beq _080041D4
ldrh r5, [r0, #0x32]
ldrh r6, [r1, #0x32]
subs r5, r5, r6
adds r5, r5, r3
lsls r3, r3, #1
cmp r3, r5
blo _080041D8
_080041D4:
movs r0, #1
pop {r5, r6, pc}
_080041D8:
movs r0, #0
pop {r5, r6, pc}
thumb_func_start sub_080041DC
sub_080041DC: @ 0x080041DC
push {r1, r2}
movs r2, #0x32
ldrsh r1, [r0, r2]
movs r3, #0x2e
ldrsh r0, [r0, r3]
pop {r2, r3}
thumb_func_start sub_080041E8
sub_080041E8: @ 0x080041E8
subs r0, r0, r2
subs r1, r1, r3
thumb_func_start sub_080041EC
sub_080041EC: @ 0x080041EC
adds r2, r0, #0
muls r0, r2, r0
adds r3, r1, #0
muls r1, r3, r1
push {lr}
adds r0, r0, r1
lsls r0, r0, #8
bl Sqrt
pop {r3}
bx r3
non_word_aligned_thumb_func_start sub_08004202
sub_08004202: @ 0x08004202
push {r1, lr}
ldrb r1, [r0, #0x14]
bl sub_08004212
pop {r0}
str r1, [r0]
adds r0, r2, #0
pop {pc}
non_word_aligned_thumb_func_start sub_08004212
sub_08004212: @ 0x08004212
push {r4}
adds r4, r1, #0
movs r3, #3
tst r4, r3
beq _08004226
movs r3, #2
lsrs r4, r4, #3
blo _08004224
rsbs r3, r3, #0
_08004224:
adds r2, r2, r3
_08004226:
adds r4, r1, #0
movs r3, #3
ands r4, r3
cmp r4, #2
beq _0800423C
movs r3, #0x80
adds r1, #1
lsrs r1, r1, #3
bhs _0800423A
rsbs r3, r3, #0
_0800423A:
adds r2, r2, r3
_0800423C:
ldr r3, _08004390 @ =0x00001FFF
ands r2, r3
movs r4, #0x38
ldrb r4, [r0, r4]
lsls r4, r4, #3
ldr r3, _08004394 @ =gUnk_08000228
adds r3, r3, r4
ldr r4, [r3]
ldrh r1, [r4, r2]
ldr r4, _08004398 @ =0x00004000
tst r1, r4
bne _0800425C
lsls r1, r1, #0x11
lsrs r1, r1, #0x10
ldr r4, [r3, #4]
ldrh r1, [r4, r1]
_0800425C:
pop {r4}
bx lr
thumb_func_start InitializeAnimation @ r0 = Entity*, r1 = Frame*
InitializeAnimation: @ 0x08004260
movs r2, #0x58 @ anim idx
strb r1, [r0, r2]
ldrh r3, [r0, #0x12] @ Sprite idx
lsls r3, r3, #4 @ *= 16
ldr r2, _0800439C @ =gSpritePtrs
ldr r2, [r2, r3] @ Load AnimData
lsls r1, r1, #2 @ *= 4
ldr r1, [r2, r1] @ AnimData->???
str r1, [r0, #0x5c]
b FrameZero
thumb_func_start GetNextFrame
GetNextFrame: @ 0x08004274
movs r1, #1
non_word_aligned_thumb_func_start UpdateAnimationVariableFrames
UpdateAnimationVariableFrames: @ 0x08004276
movs r3, #0x59
ldrb r2, [r0, r3] @ Decrease frame timer
subs r2, r2, r1
beq FrameZero @ Frame timer is 0
ble FrameNeg @ Frame timer is below 0
strb r2, [r0, r3]
bx lr
FrameNeg:
ldr r1, [r0, #0x5c] @ Load frame data
_08004286:
ldrb r3, [r1, #1]
adds r2, r2, r3
bgt _0800429C @ Frame idx greater (?)
ldrb r3, [r1, #3]
adds r1, #4
lsrs r3, r3, #8 @ Branch if != 0xFF
blo _08004286
ldrb r3, [r1]
lsls r3, r3, #2
subs r1, r1, r3
b _08004286
_0800429C:
str r1, [r0, #0x5c]
push {r2, lr}
bl FrameZero
pop {r2, r3}
movs r1, #0x59
strb r2, [r0, r1]
bx r3
thumb_func_start InitAnimationForceUpdate
InitAnimationForceUpdate: @ 0x080042AC
push {lr}
bl InitializeAnimation
movs r2, #0xff
strb r2, [r0, #0x1f]
b _080042C0
thumb_func_start UpdateAnimationSingleFrame
UpdateAnimationSingleFrame: @ 0x080042B8
movs r1, #1
non_word_aligned_thumb_func_start sub_080042BA
sub_080042BA: @ 0x080042BA
push {lr}
bl UpdateAnimationVariableFrames
_080042C0:
pop {r1}
mov lr, r1
ldrb r1, [r0, #0x1e]
ldrb r3, [r0, #0x1f]
strb r1, [r0, #0x1f]
cmp r1, r3
beq _08004328
ldrh r2, [r0, #0x12]
thumb_func_start sub_080042D0
sub_080042D0: @ 0x080042D0
cmp r1, #0xff
beq _08004328
lsls r2, r2, #4
lsls r3, r1, #2
ldr r1, _080043A0 @ =gSpritePtrs
adds r1, r1, r2
ldr r2, [r1, #4]
cmp r2, #0
beq _08004328
ldr r1, [r1, #8]
adds r2, r2, r3
ldrb r3, [r2]
cmp r3, #0
beq _08004328
push {r4, r5}
movs r3, #0x26
ldrb r3, [r0, r3]
movs r4, #0xc
muls r3, r4, r3
ldr r4, _080043A4 @ =gUnk_02024494
adds r4, r4, r3
ldrb r3, [r4]
movs r5, #0xf
ands r3, r5
cmp r3, #5
blo _08004326
ldrb r5, [r4, #6]
ldrb r3, [r2]
strb r3, [r4, #6]
subs r5, r5, r3
ldrh r3, [r2, #2]
lsls r3, r3, #5
adds r1, r1, r3
ldr r2, [r4, #8]
str r1, [r4, #8]
subs r2, r2, r1
orrs r5, r2
beq _08004326
movs r2, #0xf0
ldrb r1, [r4]
bics r1, r2
adds r1, #0x30
strb r1, [r4]
_08004326:
pop {r4, r5}
_08004328:
bx lr
FrameZero: @ r0 = Entity*
ldrb r3, [r0, #0x1e] @ Get frame idx
strb r3, [r0, #0x1f] @ Set it to last frame idx
ldr r1, [r0, #0x5c]
ldrb r3, [r1] @ Store new frame idx
strb r3, [r0, #0x1e]
ldrb r3, [r1, #1]
movs r2, #0x59
strb r3, [r0, r2]
ldrb r3, [r1, #2]
movs r2, #0x5b
strb r3, [r0, r2]
ldrb r3, [r1, #3]
movs r2, #0x5a
strb r3, [r0, r2]
adds r1, #4
lsrs r3, r3, #8
blo _08004352
ldrb r3, [r1]
lsls r3, r3, #2
subs r1, r1, r3
_08004352:
str r1, [r0, #0x5c]
bx lr
.align 2, 0
_08004358: .4byte gUnk_081326EC
_0800435C: .4byte gUnk_02024048
_08004360: .4byte gUnk_02021F20
_08004364: .4byte gUnk_02024048
_08004368: .4byte gRoomControls
_0800436C: .4byte 0x0000016E
_08004370: .4byte 0x0000011E
_08004374: .4byte gRoomControls + 6
_08004378: .4byte gRoomControls + 8
_0800437C: .4byte 0x000003F0
_08004380: .4byte gUnk_08000248
_08004384: .4byte 0x000FFFFF
_08004388: .4byte 0x00080000
_0800438C: .4byte 0x0000EE00
_08004390: .4byte 0x00001FFF
_08004394: .4byte gUnk_08000228
_08004398: .4byte 0x00004000
_0800439C: .4byte gSpritePtrs
_080043A0: .4byte gSpritePtrs
_080043A4: .4byte gUnk_02024494
thumb_func_start sub_080043A8
sub_080043A8: @ 0x080043A8
movs r1, #0xb
b _080043B6
thumb_func_start CreateChestSpawner
CreateChestSpawner: @ 0x080043AC
movs r1, #0xc
b _080043B6
thumb_func_start sub_080043B0
sub_080043B0: @ 0x080043AC
movs r1, #0x52
b _080043B6
thumb_func_start CreateItemOnGround
CreateItemOnGround: @ 0x080043B4
movs r1, #0
_080043B6:
push {r4, lr}
adds r4, r0, #0
movs r0, #0xf
movs r2, #0
bl CreateObject
cmp r0, #0
beq _080043E0 @ Branch if entity could not be created
movs r1, #0x48
ldr r1, [r4, r1] @ Unused?
ldrh r3, [r4, #0x2e]
strh r3, [r0, #0x2e]
ldrh r3, [r4, #0x32]
strh r3, [r0, #0x32]
ldrh r3, [r4, #0x36]
strh r3, [r0, #0x36]
ldrb r3, [r4, #8]
cmp r3, #3 @ Is the spawner an enemy?
bne _080043E0
movs r1, #1
strb r1, [r0, #0xb] @ Set base parameter
_080043E0:
adds r0, r4, #0
bl DeleteEntity
pop {r4, pc}
+408
View File
@@ -0,0 +1,408 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_080043E8
sub_080043E8: @ 0x080043E8
push {r4, lr}
ldrb r1, [r0, #0xc]
cmp r1, #0
beq _08004414
adds r4, r0, #0
bl sub_08016AD2
movs r3, #0x36
ldrsh r2, [r4, r3]
cmp r2, #0
bmi _08004414
cmp r0, #0
beq _08004414
add r3, pc, #0x10
_08004404:
adds r3, #4
ldrh r1, [r3]
cmp r1, #0
beq _08004414
cmp r0, r1
bne _08004404
ldrh r0, [r3, #2]
pop {r4, pc}
_08004414:
movs r0, #0
pop {r4, pc}
_08004418:
.byte 0x0D, 0x00, 0x01, 0x00, 0x10, 0x00, 0x02, 0x00
.byte 0x11, 0x00, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00
non_word_aligned_thumb_func_start sub_0800442E
sub_0800442E: @ 0x0800442E
push {r0, lr}
bl sub_080043E8
cmp r0, #0
beq _08004448
lsls r0, r0, #2
add r1, pc, #0xC
ldr r1, [r1, r0]
pop {r0}
bl _call_via_r1
movs r0, #1
pop {pc}
_08004448:
movs r0, #0
pop {r1, pc}
_0800444C: .4byte CreateItemOnGround
_08004450: .4byte sub_080043A8
_08004454: .4byte CreateChestSpawner
_08004458: .4byte sub_080043B0
thumb_func_start sub_0800445C
sub_0800445C: @ 0x0800445C
push {r4, r5, lr}
adds r4, r0, #0
bl sub_08079F8C
cmp r0, #0
beq _08004482
ldr r5, _080044D8 @ =gPlayerEntity
adds r0, r4, #0
adds r1, r5, #0
bl sub_08004484
cmp r0, #0
beq _08004482
ldrb r0, [r5, #0xc]
cmp r0, #2
bne _08004480
movs r0, #3
strb r0, [r5, #0xd]
_08004480:
movs r0, #1
_08004482:
pop {r4, r5, pc}
thumb_func_start sub_08004484
sub_08004484: @ 0x08004484
ldr r2, _080044DC @ =ram_sub_080B227C
bx r2
thumb_func_start EnqueueSFX
EnqueueSFX: @ 0x08004488
ldr r1, _080044E0 @ =gUnk_02024048
ldrb r2, [r1]
cmp r2, #8
bhs _0800449A
adds r3, r2, #1
strb r3, [r1]
ldr r1, _080044E4 @ =gUnk_02021F20
lsls r2, r2, #1
strh r0, [r1, r2]
_0800449A:
bx lr
thumb_func_start SoundReqClipped
SoundReqClipped: @ 0x0800449C
push {r1, lr}
bl CheckOnScreen
cmp r0, #0
pop {r0}
beq _080044AC
bl SoundReq
_080044AC:
pop {pc}
non_word_aligned_thumb_func_start sub_080044AE
sub_080044AE: @ 0x080044AE
push {lr}
ldr r3, _080044E8 @ =gPlayerEntity
cmp r0, r3
beq _080044CC
push {r0, r1, r2}
adds r1, r2, #0
movs r2, #2
bl CalculateEntityTileCollisions
pop {r0, r1, r2}
movs r3, #2
bl ProcessMovementInternal
_080044C8:
pop {r3}
bx r3
_080044CC:
adds r0, r1, #0
adds r1, r2, #0
bl sub_08079E58
b _080044C8
.align 2, 0
_080044D8: .4byte gPlayerEntity
_080044DC: .4byte ram_sub_080B227C
_080044E0: .4byte gUnk_02024048
_080044E4: .4byte gUnk_02021F20
_080044E8: .4byte gPlayerEntity
thumb_func_start sub_080044EC
sub_080044EC: @ 0x080044EC
ldr r2, [r0, #0x34]
ldr r3, [r0, #0x20]
subs r2, r2, r3
bpl _080044FE
str r2, [r0, #0x34]
subs r3, r3, r1
str r3, [r0, #0x20]
movs r0, #2
bx lr
_080044FE:
movs r2, #1
str r2, [r0, #0x34]
subs r3, r3, r1
rsbs r3, r3, #0
lsrs r3, r3, #1
lsrs r1, r3, #2
adds r3, r3, r1
lsrs r1, r3, #0xc
cmp r1, #0xc
bhs _08004516
movs r2, #0
movs r3, #0
_08004516:
str r3, [r0, #0x20]
adds r0, r2, #0
bx lr
thumb_func_start sub_0800451C
sub_0800451C: @ 0x0800451C
push {r0, lr}
bl sub_080B1AA8
adds r1, r0, #0
pop {r0, r3}
mov lr, r3
cmp r1, #0xc
beq sub_08004542
cmp r1, #0xb
beq sub_08004542
cmp r1, #0xa
beq ResetCollisionLayer
cmp r1, #9
beq ResetCollisionLayer
cmp r1, #0x26
beq _0800457A
cmp r1, #0x27
beq _0800457A
bx lr
non_word_aligned_thumb_func_start sub_08004542
sub_08004542: @ 0x08004542
movs r1, #0x38
movs r2, #2
strb r2, [r0, r1]
movs r2, #0xc0
ldrb r1, [r0, #0x1b]
bics r1, r2
adds r1, #0x40
strb r1, [r0, #0x1b]
movs r2, #0xc0
ldrb r1, [r0, #0x19]
bics r1, r2
adds r1, #0x40
strb r1, [r0, #0x19]
bx lr
non_word_aligned_thumb_func_start ResetCollisionLayer
ResetCollisionLayer: @ 0x0800455E
movs r1, #0x38
movs r2, #1
strb r2, [r0, r1]
movs r2, #0xc0
ldrb r1, [r0, #0x1b]
bics r1, r2
adds r1, #0x80
strb r1, [r0, #0x1b]
movs r2, #0xc0
ldrb r1, [r0, #0x19]
bics r1, r2
adds r1, #0x80
strb r1, [r0, #0x19]
bx lr
_0800457A:
movs r1, #0x38
movs r2, #3
strb r2, [r0, r1]
movs r2, #0xc0
ldrb r1, [r0, #0x1b]
bics r1, r2
adds r1, #0x40
strb r1, [r0, #0x1b]
movs r2, #0xc0
ldrb r1, [r0, #0x19]
bics r1, r2
adds r1, #0x40
strb r1, [r0, #0x19]
bx lr
non_word_aligned_thumb_func_start sub_08004596
sub_08004596: @ 0x08004596
movs r2, #0x1f
ldrb r3, [r0, #0x15]
cmp r3, #0x20
bhs _080045AE
subs r1, r1, r3
beq _080045B2
ands r1, r2
cmp r1, #0x10
movs r1, #1
blo _080045AC
rsbs r1, r1, #0
_080045AC:
adds r1, r3, r1
_080045AE:
ands r1, r2
strb r1, [r0, #0x15]
_080045B2:
bx lr
thumb_func_start sub_080045B4
sub_080045B4: @ 0x080045B4
mov ip, r2
adds r2, r1, #0
movs r3, #0x32
ldrsh r1, [r0, r3]
movs r3, #0x2e
ldrsh r0, [r0, r3]
ldr r3, _08004690 @ =ram_CalcCollisionDirection
bx r3
thumb_func_start GetFacingDirection
GetFacingDirection: @ 0x080045C4
push {r4, r5}
movs r4, #0x32
movs r5, #0x2e
ldrsh r3, [r1, r4]
ldrsh r2, [r1, r5]
ldrsh r1, [r0, r4]
ldrsh r0, [r0, r5]
pop {r4, r5}
thumb_func_start CalculateDirectionTo
CalculateDirectionTo: @ 0x080045D4
mov ip, r3
ldr r3, _08004694 @ =ram_CalcCollisionDirection
bx r3
non_word_aligned_thumb_func_start sub_080045DA
sub_080045DA: @ 0x080045DA
push {r0, r1, r4, r5, r6, lr}
movs r6, #0x40
cmp r0, #0
beq _08004632
ldr r5, _08004698 @ =gUnk_080C93E0
lsls r2, r1, #8
adds r1, r0, #0
adds r0, r2, #0
bl Div
ldr r1, _0800469C @ =0x00000106
cmp r3, r1
bhs _08004608
movs r1, #0x6e
cmp r3, r1
bhs _08004602
movs r6, #0
movs r1, #0
movs r2, #0x20
b _08004618
_08004602:
movs r1, #0x20
movs r2, #0x40
b _08004618
_08004608:
ldr r1, _080046A0 @ =0x00000280
cmp r3, r1
bhs _08004614
movs r1, #0x40
movs r2, #0x60
b _08004618
_08004614:
movs r1, #0x60
movs r2, #0x7e
_08004618:
adds r0, r1, r5
ldrh r4, [r0]
cmp r3, r4
blo _0800462C
ldrh r4, [r0, #2]
cmp r3, r4
bhs _0800462C
lsrs r6, r1, #1
adds r6, #1
b _08004632
_0800462C:
adds r1, #2
cmp r1, r2
blo _08004618
_08004632:
adds r2, r6, #0
pop {r0, r1, r4, r5, r6}
cmp r0, #0
bmi _08004644
movs r0, #0x40
cmp r1, #0
bmi _0800464A
_08004640:
adds r0, r0, r2
pop {pc}
_08004644:
movs r0, #0xc0
cmp r1, #0
bmi _08004640
_0800464A:
subs r0, r0, r2
pop {pc}
gUnk_0800464E::
.byte 0x00, 0x01
.byte 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x08, 0x07, 0x06, 0x05, 0x04, 0x00, 0x00, 0x00, 0x10, 0x0F
.byte 0x0E, 0x0D, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1F
.byte 0x1E, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x00, 0x00, 0x00, 0x10, 0x11
.byte 0x12, 0x13, 0x14, 0x00, 0x00, 0x00, 0x18, 0x17, 0x16, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00
_08004690: .4byte ram_CalcCollisionDirection
_08004694: .4byte ram_CalcCollisionDirection
_08004698: .4byte gUnk_080C93E0
_0800469C: .4byte 0x00000106
_080046A0: .4byte 0x00000280
gUnk_080046A4:: @ 080046A4
.incbin "code_080043E8/gUnk_080046A4.bin"
gUnk_080047F6:: @ 080047F6
.incbin "code_080043E8/gUnk_080047F6.bin"
gUnk_080049D6:: @ 080049D6
.incbin "code_080043E8/gUnk_080049D6.bin"
gUnk_080049F6:: @ 080049F6
.incbin "code_080043E8/gUnk_080049F6.bin"
gUnk_080049FE:: @ gUnk_080049FE
.incbin "code_080043E8/gUnk_080049FE.bin"
gUnk_08004A0C:: @ 08004A0C
.incbin "code_080043E8/gUnk_08004A0C.bin"
gUnk_08004A16:: @ 08004A16
.incbin "code_080043E8/gUnk_08004A16.bin"
gUnk_08004A24:: @ 08004A24
.incbin "code_080043E8/gUnk_08004A24.bin"
gUnk_08004A32:: @ 08004A32
.incbin "code_080043E8/gUnk_08004A32.bin"
gUnk_08004A48:: @ 08004A48
.incbin "code_080043E8/gUnk_08004A48.bin"
gUnk_08004A72:: @ 08004A72
.incbin "code_080043E8/gUnk_08004A72.bin"
gUnk_08004A8C:: @ 08004A8C
.incbin "code_080043E8/gUnk_08004A8C.bin"
gUnk_08004AA6:: @ 08004AA6
.incbin "code_080043E8/gUnk_08004AA6.bin"
+52
View File
@@ -0,0 +1,52 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
gUnk_08007CAC:: @ 08007CAC
.incbin "code_080043E8/gUnk_08007CAC.bin"
.ifdef DEMO_JP
@ TODO only one byte differs
.incbin "code_080043E8/gUnk_08007CAC_1_DEMO_JP.bin"
.else
.ifdef DEMO_USA
@ TODO only one byte differs
.incbin "code_080043E8/gUnk_08007CAC_2_DEMO_USA.bin"
.else
.ifdef JP
@ TODO only one byte differs
.incbin "code_080043E8/gUnk_08007CAC_3_JP.bin"
.else
.ifdef EU
@ TODO only two bytes differ
.incbin "code_080043E8/gUnk_08007CAC_4_EU.bin"
.else
.incbin "code_080043E8/gUnk_08007CAC_5_USA.bin"
.endif
.endif
.endif
.endif
non_word_aligned_thumb_func_start sub_08007DD6
sub_08007DD6: @ 0x08007DD6
push {lr}
bl sub_08007DE0
adds r0, r3, #0
pop {pc}
thumb_func_start sub_08007DE0
sub_08007DE0: @ 0x08007DE0
subs r1, #4
_08007DE2:
adds r1, #4
ldrh r3, [r1]
cmp r3, #0
beq _08007DF2
cmp r0, r3
bne _08007DE2
ldrh r3, [r1, #2]
movs r2, #1
_08007DF2:
bx lr
+49
View File
@@ -0,0 +1,49 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
arm_func_start __start
__start:
b start_vector
header:
.include "asm/rom_header.inc"
start_vector:
mov r0, #0x12
msr cpsr_fc, r0
ldr sp, sp_irq
mov r0, #0x1f
msr cpsr_fc, r0
ldr sp, sp_usr
ldr r1, INTR_VECTOR_BUF
ldr r0, intr_main
str r0, [r1]
.ifdef EU
ldr r1, unk_function
mov lr, pc
bx r1
.else
.ifdef DEMO_JP
ldr r1, unk_function
mov lr, pc
bx r1
.endif
.endif
ldr r1, =AgbMain
mov lr, pc
bx r1
_080000F0:
b start_vector
sp_irq: .4byte irq_stack_begin
sp_usr: .4byte usr_stack_begin
INTR_VECTOR_BUF: .4byte 0x03007FFC
intr_main: .4byte ram_IntrMain
.ifdef EU
unk_function: .4byte fill_rq_stack
.else
.ifdef DEMO_JP
unk_function: .4byte fill_rq_stack
.endif
.endif
+250
View File
@@ -0,0 +1,250 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start EnemyUpdate
EnemyUpdate: @ 0x080011C4
mov r3, lr
push {r3, r4}
adds r4, r0, #0
ldrb r2, [r0, #0xc]
cmp r2, #0
bne _080011DC
bl EnemyInit
cmp r0, #0
bne _080011EA
bl DeleteThisEntity
_080011DC:
bl EntityIsDeleted
cmp r0, #0
bne _0800120A
adds r0, r4, #0
bl sub_080028E0
_080011EA:
adds r0, r4, #0
movs r1, #0x6d
ldrb r1, [r0, r1]
lsrs r1, r1, #5
bhs _0800120A
ldrb r1, [r0, #9]
lsls r1, r1, #2
ldr r2, _08001358 @ =gEnemyFunctions
ldr r1, [r2, r1]
bl _call_via_r1
movs r1, #0x41
movs r3, #0x7f
ldrb r2, [r4, r1]
ands r2, r3
strb r2, [r4, r1]
_0800120A:
adds r0, r4, #0
bl DrawEntity
pop {r3, r4}
bx r3
thumb_func_start sub_08001214
sub_08001214: @ 0x08001214
movs r3, #0x3a
ldrb r1, [r0, r3]
movs r2, #1
tst r1, r2
bne _08001230
orrs r1, r2
strb r2, [r0, r3]
movs r1, #1
movs r2, #0x5a
ldrb r2, [r0, r2]
lsrs r2, r2, #7
blo _0800122E
movs r1, #0x20
_0800122E:
strb r1, [r0, #0xe]
_08001230:
ldrb r1, [r0, #0xe]
subs r1, #1
beq _0800123E
strb r1, [r0, #0xe]
movs r1, #4
ldr r3, _0800135C @ =UpdateAnimationVariableFrames
bx r3
_0800123E:
ldr r3, _08001360 @ =CreateItemOnGround
bx r3
non_word_aligned_thumb_func_start GenericConfused
GenericConfused: @ 0x08001242
push {lr}
movs r1, #0x43
ldrb r2, [r0, r1]
subs r2, #1
strb r2, [r0, r1]
cmp r2, #0x3c
bhs _08001282
movs r3, #3
ands r3, r2
add r1, pc, #0x34
ldrsb r1, [r1, r3]
movs r3, #0x62
strb r1, [r0, r3]
cmp r2, #0
bne _08001282
movs r1, #0x68
ldr r1, [r0, r1]
cmp r1, #0
beq _08001282
ldrb r2, [r1, #8]
cmp r2, #6
bne _08001282
ldrb r2, [r1, #9]
cmp r2, #0xf
bne _08001282
ldrb r2, [r1, #0xa]
cmp r2, #0x1c
bne _08001282
push {r0}
bl sub_0804AA1C
pop {r0}
_08001282:
ldr r1, _08001364 @ =0x00001800
bl GravityUpdate
pop {pc}
.align 2, 0
_0800128C:
.byte 0x00, 0x01, 0x00, 0xFF
thumb_func_start sub_08001290
sub_08001290: @ 0x08001290
cmp r1, #0
beq _0800129C
ldr r2, _08001368 @ =gUnk_080012C8
lsls r1, r1, #2
ldr r1, [r2, r1]
bx r1
_0800129C:
bx lr
@ r0: Entity*
@ r1: Function* array
non_word_aligned_thumb_func_start EnemyFunctionHandler
EnemyFunctionHandler: @ 0x0800129E
mov r3, lr
push {r3, r4, r5}
adds r4, r0, #0
adds r5, r1, #0
bl sub_080012DC
cmp r0, #0
beq _080012B2
ldr r1, _0800136C @ =gUnk_080012C8
b _080012BA
_080012B2:
adds r0, r4, #0
bl GetNextFunction
adds r1, r5, #0
_080012BA:
lsls r0, r0, #2
ldr r1, [r1, r0]
adds r0, r4, #0
pop {r3, r4, r5}
mov lr, r3
bx r1
.align 2, 0
gUnk_080012C8::
.4byte 0x00000000
_080012CC: .4byte sub_08001214
_080012D0: .4byte sub_080043A8
_080012D4: .4byte CreateChestSpawner
_080012D8: .4byte sub_080043B0
thumb_func_start sub_080012DC
sub_080012DC: @ 0x080012DC
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x3a
ldrb r1, [r4, r5]
lsrs r1, r1, #3
bhs _08001302
bl sub_080043E8
cmp r0, #4
beq _08001302
cmp r0, #0
bne _08001306
ldrb r1, [r4, r5]
lsrs r1, r1, #1
blo _08001302
ldrb r1, [r4, #0x10]
movs r2, #0x80
orrs r1, r2
strb r1, [r4, #0x10]
_08001302:
movs r0, #0
pop {r4, r5, pc}
_08001306:
cmp r0, #1
beq _08001316
movs r1, #1
strb r1, [r4, #0xe]
ldrb r2, [r4, r5]
movs r1, #1
orrs r1, r2
strb r1, [r4, r5]
_08001316:
pop {r4, r5, pc}
thumb_func_start sub_08001318
sub_08001318: @ 0x08001318
movs r1, #0x36
ldrsh r1, [r0, r1]
cmp r1, #0
bpl GenericKnockback
movs r2, #0xff
strb r2, [r0, #0x15]
thumb_func_start GenericKnockback
GenericKnockback: @ 0x08001324
ldr r3, _08001370 @ =Knockback1
bx r3
thumb_func_start GenericKnockback2
GenericKnockback2: @ 0x08001328
ldr r3, _08001374 @ =Knockback2
bx r3
thumb_func_start sub_0800132C
sub_0800132C: @ 0x0800132C
movs r2, #0x38
ldrb r3, [r1, r2]
ldrb r2, [r0, r2]
ands r2, r3
beq _08001352
ldrh r2, [r0, #0x2e]
ldrh r3, [r1, #0x2e]
subs r2, r2, r3
adds r2, #8
cmp r2, #0x11
bhs _0800134E
ldrh r2, [r0, #0x32]
ldrh r3, [r1, #0x32]
subs r2, r2, r3
adds r2, #8
cmp r2, #0x11
blo _08001352
_0800134E:
ldr r3, _08001378 @ =GetFacingDirection
bx r3
_08001352:
movs r0, #0xff
bx lr
.align 2, 0
_08001358: .4byte gEnemyFunctions
_0800135C: .4byte UpdateAnimationVariableFrames
_08001360: .4byte CreateItemOnGround
_08001364: .4byte 0x00001800
_08001368: .4byte gUnk_080012C8
_0800136C: .4byte gUnk_080012C8
_08001370: .4byte Knockback1
_08001374: .4byte Knockback2
_08001378: .4byte GetFacingDirection
+1947
View File
File diff suppressed because it is too large Load Diff
+786
View File
@@ -0,0 +1,786 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_0800857C
sub_0800857C: @ 0x0800857C
push {r4, r5, r6, r7, lr}
mov r4, r8
mov r5, sb
mov r6, sl
mov r7, fp
push {r4, r5, r6, r7}
ldrb r1, [r0, #0xb]
lsrs r1, r1, #8
bhs _0800859C
ldr r1, _08008888 @ =gPlayerState
ldrb r1, [r1, #2]
movs r2, #0x80
ands r1, r2
bne _0800859C
bl sub_080085CC
_0800859C:
ldrh r1, [r0, #0x24]
ldrb r2, [r0, #0x15]
bl sub_080027EA
pop {r4, r5, r6, r7}
mov r8, r4
mov sb, r5
mov sl, r6
mov fp, r7
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080085B0
sub_080085B0: @ 0x080085B0
push {r3, r4, r5, r6, r7, lr}
mov r4, r8
mov r5, sb
mov r6, sl
mov r7, fp
push {r4, r5, r6, r7}
bl sub_080085CC
pop {r4, r5, r6, r7}
mov r8, r4
mov sb, r5
mov sl, r6
mov fp, r7
pop {r3, r4, r5, r6, r7, pc}
thumb_func_start sub_080085CC
sub_080085CC: @ 0x080085CC
push {lr}
ldr r2, _0800888C @ =gPlayerState
ldr r1, _08008890 @ =gUnk_080083FC
movs r3, #0x26
ldrb r3, [r2, r3]
orrs r3, r3
beq _080085E6
ldr r2, [r2, #0x30]
movs r3, #0x80
ands r2, r3
beq _0800861A
ldr r1, _08008894 @ =gUnk_0800839C
b _0800861A
_080085E6:
ldr r1, _08008898 @ =gUnk_0800845C
ldrb r3, [r2, #2]
orrs r3, r3
bne _0800861A
ldr r2, [r2, #0x30]
ldr r3, _0800889C @ =0x01000000
tst r2, r3
bne _0800861A
movs r3, #0x80
ldr r1, _080088A0 @ =gUnk_0800833C
ands r2, r3
bne _0800861A
ldr r1, _080088A4 @ =gUnk_080084BC
ldr r3, _080088A8 @ =gPlayerState
ldrb r2, [r3, #0x1c]
orrs r2, r2
bne _0800861A
ldrb r2, [r3, #5]
orrs r2, r2
bne _0800861A
ldr r1, _080088AC @ =gUnk_0800851C
movs r2, #0xaa
ldrb r2, [r3, r2]
orrs r2, r2
bne _0800861A
ldr r1, _080088B0 @ =gUnk_080082DC
_0800861A:
mov fp, r1
movs r7, #0
mov r8, r0
movs r2, #0x2e
ldrh r3, [r0, r2]
movs r2, #0x32
ldrh r4, [r0, r2]
movs r2, #0x48
ldr r5, [r0, r2]
ldr r1, _080088B4 @ =gRoomControls + 6
ldrh r1, [r1]
subs r3, r3, r1
ldr r1, _080088B8 @ =gRoomControls + 8
ldrh r1, [r1]
subs r4, r4, r1
eors r2, r2
ldrsb r0, [r5, r2]
adds r0, r0, r3
movs r2, #1
ldrsb r1, [r5, r2]
adds r1, r1, r4
push {r0, r1}
ldrb r2, [r5, #2]
adds r0, r0, r2
ldrb r4, [r5, #3]
movs r6, #2
mov sl, r1
_08008650:
lsls r7, r7, #1
lsls r7, r7, #1
adds r1, r1, r4
bl sub_080086D8
orrs r7, r2
lsls r7, r7, #1
mov r1, sl
subs r1, r1, r4
bl sub_080086D8
orrs r7, r2
lsls r7, r7, #1
subs r6, #1
beq _08008678
mov r1, sl
ldrb r3, [r5, #2]
subs r0, r0, r3
subs r0, r0, r3
b _08008650
_08008678:
pop {r0, r1}
ldrb r2, [r5, #5]
adds r1, r1, r2
ldrb r4, [r5, #4]
movs r6, #2
mov sb, r0
_08008684:
lsls r7, r7, #1
lsls r7, r7, #1
adds r0, r0, r4
bl sub_080086D8
orrs r7, r2
lsls r7, r7, #1
mov r0, sb
subs r0, r0, r4
bl sub_080086D8
orrs r7, r2
lsls r7, r7, #1
subs r6, #1
beq _080086AC
mov r0, sb
ldrb r3, [r5, #5]
subs r1, r1, r3
subs r1, r1, r3
b _08008684
_080086AC:
mov r0, r8
movs r2, #0x2a
strh r7, [r0, r2]
pop {pc}
thumb_func_start sub_080086B4
sub_080086B4: @ 0x080086B4
push {r3, r4, r5, r6, r7, lr}
mov r4, r8
mov r5, sb
mov r6, sl
mov r7, fp
push {r4, r5, r6, r7}
mov fp, r2
ldr r2, _080088BC @ =gPlayerEntity
mov r8, r2
bl sub_080086D8
pop {r4, r5, r6, r7}
mov r8, r4
mov sb, r5
mov sl, r6
mov fp, r7
adds r0, r2, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_start sub_080086D8
sub_080086D8: @ 0x080086D8
push {r0, r1, lr}
ldr r2, _080088C0 @ =0x000003F0
ands r0, r2
ands r1, r2
lsrs r0, r0, #4
lsls r1, r1, #2
adds r0, r0, r1
mov r2, r8
movs r3, #0x38
ldrb r3, [r2, r3]
lsls r3, r3, #2
ldr r1, _080088C4 @ =gUnk_08000248
ldr r1, [r1, r3]
ldrb r2, [r0, r1]
push {r2}
mov r0, r8
ldr r1, _080088C8 @ =gPlayerState
movs r2, #0x26
ldrb r2, [r1, r2]
cmp r2, #0
beq _08008716
movs r2, #0x12
ldrb r2, [r1, r2]
cmp r2, #0x18
beq _08008716
pop {r2}
pop {r0, r1}
cmp r2, #0x10
bhs _0800872E
movs r2, #0xf
b _0800871E
_08008716:
pop {r2}
pop {r0, r1}
cmp r2, #0x10
bhs _0800872E
_0800871E:
movs r3, #8
tst r1, r3
bne _08008726
lsrs r2, r2, #2
_08008726:
tst r0, r3
bne _08008754
lsrs r2, r2, #1
b _08008754
_0800872E:
cmp r2, #0xff
beq _08008754
push {r4}
subs r2, #0x10
mov r3, fp
ldrb r2, [r2, r3]
lsls r2, r2, #2
ldr r3, _080088CC @ =gUnk_0800823C
ldr r3, [r3, r2]
movs r4, #0xf
ands r4, r1
lsls r4, r4, #1
ldrh r2, [r3, r4]
movs r3, #0xf
adds r4, r3, #0
ands r3, r0
eors r4, r3
lsrs r2, r4
pop {r4}
_08008754:
movs r3, #1
ands r2, r3
pop {pc}
non_word_aligned_thumb_func_start sub_0800875A
sub_0800875A: @ 0x0800875A
push {r2, r4, lr}
ldrb r3, [r0, #0x14]
movs r2, #6
ands r3, r2
ldr r4, _080088D0 @ =gUnk_08007DF4
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
bl sub_08008782
pop {r2, r4}
cmp r0, #0
beq _08008780
ldrb r1, [r0, #2]
strb r1, [r2, #3]
ldrb r1, [r0, #3]
strb r1, [r2, #7]
ldrb r1, [r0, #5]
strb r1, [r2, #8]
_08008780:
pop {pc}
non_word_aligned_thumb_func_start sub_08008782
sub_08008782: @ 0x08008782
push {r4}
ldrh r4, [r0, #0x2e]
adds r2, r2, r4
ldrh r4, [r0, #0x32]
adds r3, r3, r4
pop {r4}
b sub_08008796
thumb_func_start sub_08008790
sub_08008790: @ 0x08008790
ldrh r2, [r0, #0x2e]
ldrh r3, [r0, #0x32]
b sub_08008796
non_word_aligned_thumb_func_start sub_08008796
sub_08008796: @ 0x08008796
push {r4, r5, r6, r7, lr}
push {r2, r3}
ldr r2, _080088D4 @ =gRoomControls
ldrh r3, [r2]
movs r2, #1
cmp r2, r3
pop {r2, r3}
beq _080087CE
push {r0, r1, r2, r3}
pop {r4, r5, r6, r7}
adds r0, r6, #0
adds r1, r7, #0
movs r2, #0x38
ldrb r2, [r4, r2]
bl GetTileTypeByPos
ldr r1, _080088D8 @ =gUnk_080046A4
bl sub_08007DE0
beq _080087CE
lsls r1, r3, #3
adds r3, r5, #0
ldr r0, _080088DC @ =gUnk_080047F6
adds r5, r0, r1
ldrh r0, [r5]
lsrs r0, r3
lsrs r0, r0, #1
bhs _080087D2
_080087CE:
movs r0, #0
pop {r4, r5, r6, r7, pc}
_080087D2:
ldrb r0, [r5, #2]
ldrb r1, [r5, #3]
cmp r0, #0xff
beq _0800883A
cmp r3, #6
beq _0800883A
cmp r3, #0xe
beq _0800883A
cmp r3, #0xa
beq _0800883A
cmp r3, #0xb
beq _0800883A
cmp r3, #0xd
bne _080087F6
cmp r0, #0xf
bne _0800883A
cmp r1, #0x17
bne _0800883A
_080087F6:
movs r2, #0
cmp r0, #0xf
bne _080087FE
movs r2, #0x80
_080087FE:
bl CreateObject
cmp r0, #0
beq _0800883A
ldrb r1, [r5, #2]
cmp r1, #0
beq _08008820
movs r2, #0xf
adds r1, r6, #0
bics r1, r2
adds r1, #8
strh r1, [r0, #0x2e]
adds r1, r7, #0
bics r1, r2
adds r1, #8
strh r1, [r0, #0x32]
b _0800882C
_08008820:
ldrh r1, [r4, #0x2e]
strh r1, [r0, #0x2e]
ldrh r1, [r4, #0x32]
strh r1, [r0, #0x32]
ldrh r1, [r4, #0x36]
strh r1, [r1, #0x36]
_0800882C:
movs r3, #0x50
str r4, [r1, r3]
movs r3, #0x38
ldrb r1, [r4, r3]
strb r1, [r0, r3]
bl UpdateSpriteForCollisionLayer
_0800883A:
ldr r1, _080088E0 @ =gRoomControls
ldrh r0, [r1, #6]
subs r2, r6, r0
lsrs r2, r2, #4
ldrh r0, [r1, #8]
subs r3, r7, r0
lsrs r3, r3, #4
lsls r3, r3, #6
adds r1, r2, r3
movs r3, #0x38
ldrb r2, [r4, r3]
ldrh r0, [r5, #6]
ldr r3, _080088E4 @ =0x00004000
tst r0, r3
beq _08008870
ldr r3, _080088E8 @ =0x0000FFFF
cmp r0, r3
beq _08008876
push {r0, r1}
adds r0, r2, #0
bl GetLayerByIndex
adds r3, r0, #4
pop {r0, r1}
lsls r1, r1, #1
strh r0, [r3, r1]
b _0800887E
_08008870:
bl sub_0807B7D8
b _0800887E
_08008876:
adds r0, r1, #0
adds r1, r2, #0
bl sub_0807BA8C
_0800887E:
ldrb r1, [r5, #2]
ldrb r2, [r5, #3]
adds r0, r5, #0
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08008888: .4byte gPlayerState
_0800888C: .4byte gPlayerState
_08008890: .4byte gUnk_080083FC
_08008894: .4byte gUnk_0800839C
_08008898: .4byte gUnk_0800845C
_0800889C: .4byte 0x01000000
_080088A0: .4byte gUnk_0800833C
_080088A4: .4byte gUnk_080084BC
_080088A8: .4byte gPlayerState
_080088AC: .4byte gUnk_0800851C
_080088B0: .4byte gUnk_080082DC
_080088B4: .4byte gRoomControls + 6
_080088B8: .4byte gRoomControls + 8
_080088BC: .4byte gPlayerEntity
_080088C0: .4byte 0x000003F0
_080088C4: .4byte gUnk_08000248
_080088C8: .4byte gPlayerState
_080088CC: .4byte gUnk_0800823C
_080088D0: .4byte gUnk_08007DF4
_080088D4: .4byte gRoomControls
_080088D8: .4byte gUnk_080046A4
_080088DC: .4byte gUnk_080047F6
_080088E0: .4byte gRoomControls
_080088E4: .4byte 0x00004000
_080088E8: .4byte 0x0000FFFF
_080088EC:
.byte 0x00, 0xFD, 0x03, 0xFD
.byte 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0xFD, 0x03, 0xFD, 0x00, 0xFD, 0xFD
_080088FC:
.byte 0x00, 0xF6, 0x0A, 0xF6
.byte 0x0A, 0x00, 0x0A, 0x0A, 0x00, 0x0A, 0xF6, 0x0A, 0xF6, 0x00, 0xF6, 0xF6
_0800890C:
.byte 0x00, 0x06, 0xFA, 0x00
.byte 0x00, 0xFA, 0x06, 0x00, 0x13, 0x12, 0x12, 0x10, 0x10, 0x11, 0x11, 0x13
_0800891C:
push {r0}
bl ResetPlayerVelocity
pop {r0}
_08008924:
pop {pc}
non_word_aligned_thumb_func_start sub_08008926
sub_08008926: @ 0x08008926
push {r4, r5, r6, lr}
bl sub_08008942
pop {r4, r5, r6, pc}
non_word_aligned_thumb_func_start sub_0800892E
sub_0800892E: @ 0x0800892E
push {r4, r5, r6, lr}
bl sub_08008936
pop {r4, r5, r6, pc}
non_word_aligned_thumb_func_start sub_08008936
sub_08008936: @ 0x08008936
push {lr}
ldrb r2, [r0, #0x14]
lsrs r2, r2, #1
lsls r2, r2, #3
ldr r1, _08008A68 @ =gPlayerState
b _08008960
non_word_aligned_thumb_func_start sub_08008942
sub_08008942: @ 0x08008942
push {lr}
ldr r1, _08008A6C @ =gPlayerState
ldrb r2, [r1, #7]
ldrb r3, [r1, #0xa]
orrs r2, r3
bne _08008924
ldrb r2, [r1, #0xd]
b _08008956
_08008952:
push {lr}
ldr r1, _08008A70 @ =gPlayerState
_08008956:
movs r3, #0x15
strb r2, [r0, r3]
movs r3, #0x80
tst r2, r3
bne _080089C0
_08008960:
ldrb r3, [r1, #5]
cmp r3, #2
beq _0800891C
cmp r3, #1
beq _0800891C
ldr r4, _08008A74 @ =_080088FC
ldrb r3, [r1, #2]
adds r1, r2, #0
orrs r3, r3
beq _08008992
push {r2}
movs r3, #0x14
ldrb r1, [r0, r3]
lsrs r1, r1, #1
lsls r1, r1, #1
lsrs r2, r2, #2
subs r2, r2, r1
pop {r1}
adds r2, #2
movs r4, #7
ands r2, r4
ldr r4, _08008A78 @ =_080088EC
cmp r2, #4
beq _08008992
bhs _080089A8
_08008992:
adds r3, r1, #0
lsrs r3, r3, #2
lsls r3, r3, #1
adds r4, r4, r3
movs r3, #0
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
bl sub_08008A46
b _080089C0
_080089A8:
movs r3, #0x14
ldrb r3, [r0, r3]
lsrs r3, r3, #1
lsls r3, r3, #1
ldr r4, _08008A7C @ =_0800890C
adds r4, r4, r3
movs r3, #0
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
bl sub_08008A46
_080089C0:
ldr r1, _08008A80 @ =gPlayerState
movs r4, #0x8c
movs r2, #8
ldrsh r3, [r1, r4]
orrs r3, r3
beq _080089E4
bpl _080089D2
movs r2, #0x18
rsbs r3, r3, #0
_080089D2:
push {r0, r1}
adds r1, r3, #0
push {r2}
bl sub_080027EA
pop {r0}
bl sub_0807A5B8
pop {r0, r1}
_080089E4:
movs r4, #0x8e
movs r2, #0x10
ldrsh r3, [r1, r4]
orrs r3, r3
beq _08008A06
bpl _080089F4
movs r2, #0
rsbs r3, r3, #0
_080089F4:
push {r0, r1}
adds r1, r3, #0
push {r2}
bl sub_080027EA
pop {r0}
bl sub_0807A5B8
pop {r0, r1}
_08008A06:
ldrb r2, [r1, #2]
orrs r2, r2
bne _08008A18
movs r2, #0x8c
bl sub_08008A1A
movs r2, #0x8e
bl sub_08008A1A
_08008A18:
pop {pc}
non_word_aligned_thumb_func_start sub_08008A1A
sub_08008A1A: @ 0x08008A1A
ldrb r3, [r1, #2]
movs r4, #3
orrs r3, r3
bne _08008A2C
movs r3, #0x26
ldrb r3, [r1, r3]
orrs r3, r3
bne _08008A2C
movs r4, #3
_08008A2C:
ldrsh r3, [r1, r2]
orrs r3, r3
bmi _08008A3E
subs r3, r3, r4
bpl _08008A3A
beq _08008A3A
_08008A38:
eors r3, r3
_08008A3A:
strh r3, [r1, r2]
mov pc, lr
_08008A3E:
adds r3, r3, r4
bmi _08008A3A
beq _08008A3A
b _08008A38
non_word_aligned_thumb_func_start sub_08008A46
sub_08008A46: @ 0x08008A46
push {lr}
ldr r1, _08008A84 @ =gPlayerState
movs r4, #0x8c
ldrsh r5, [r1, r4]
adds r5, r5, r2
bl sub_08008A88
movs r4, #0x8e
ldrsh r5, [r1, r4]
adds r5, r5, r3
bl sub_08008A88
pop {pc}
_08008A60:
eors r3, r3
strh r3, [r1]
pop {pc}
.align 2, 0
_08008A68: .4byte gPlayerState
_08008A6C: .4byte gPlayerState
_08008A70: .4byte gPlayerState
_08008A74: .4byte _080088FC
_08008A78: .4byte _080088EC
_08008A7C: .4byte _0800890C
_08008A80: .4byte gPlayerState
_08008A84: .4byte gPlayerState
thumb_func_start sub_08008A88
sub_08008A88: @ 0x08008A88
orrs r5, r5
bmi _08008A94
ldr r6, _08008B38 @ =0x00000180
cmp r5, r6
blo _08008A9C
b _08008A9A
_08008A94:
ldr r6, _08008B3C @ =0xFFFFFE80
cmp r5, r6
bhs _08008A9C
_08008A9A:
adds r5, r6, #0
_08008A9C:
strh r5, [r1, r4]
mov pc, lr
thumb_func_start sub_08008AA0
sub_08008AA0: @ 0x08008AA0
push {r4, r5, lr}
ldr r1, _08008B40 @ =gPlayerState
ldrb r2, [r1, #0x12]
cmp r2, #1
beq _08008AC4
ldrb r2, [r1, #0xd]
cmp r2, #0xff
beq _08008AC4
lsls r2, r2, #4
ldr r3, _08008B44 @ =gSineTable
ldrsh r4, [r3, r2]
adds r3, #0x80
ldrsh r5, [r3, r2]
rsbs r5, r5, #0
movs r2, #0x8c
strh r4, [r1, r2]
movs r2, #0x8e
strh r5, [r1, r2]
_08008AC4:
pop {r4, r5, pc}
non_word_aligned_thumb_func_start sub_08008AC6
sub_08008AC6: @ 0x08008AC6
push {r0, lr}
ldr r1, _08008B48 @ =gPlayerState
movs r3, #0x26
ldrb r2, [r1, r3]
movs r3, #0xf
ands r2, r3
bne _08008AEC
ldr r2, [r1, #0x30]
ldr r3, _08008B4C @ =gUnk_02000020
ands r2, r3
bne _08008AEC
bl sub_08008AEE
beq _08008AEC
movs r3, #0xe2
movs r2, #0x3d
strb r3, [r0, r2]
bl RespawnPlayer
_08008AEC:
pop {r0, pc}
non_word_aligned_thumb_func_start sub_08008AEE
sub_08008AEE: @ 0x08008AEE
ldrh r2, [r0, #0x2a]
movs r3, #0xe
movs r1, #4
_08008AF4:
tst r2, r3
beq _08008B00
lsrs r2, r2, #4
subs r1, #1
bne _08008AF4
movs r2, #1
_08008B00:
bx lr
non_word_aligned_thumb_func_start sub_08008B02
sub_08008B02: @ 0x08008B02
push {r0, r1, lr}
movs r1, #0
movs r2, #0
bl sub_080B1A8C
ldr r1, _08008B50 @ =0x00004000
tst r0, r1
bne _08008B1E
ldr r1, _08008B54 @ =gUnk_08007CAC
bl sub_08007DE0
movs r2, #1
cmp r3, #1
beq _08008B20
_08008B1E:
movs r2, #0
_08008B20:
pop {r0, r1, pc}
non_word_aligned_thumb_func_start sub_08008B22
sub_08008B22: @ 0x08008B22
push {lr}
ldr r0, _08008B58 @ =gPlayerEntity
bl sub_08008B02
adds r0, r2, #0
pop {pc}
non_word_aligned_thumb_func_start sub_08008B2E
sub_08008B2E: @ 0x08008B2E
push {r0, lr}
adds r0, r2, #0
bl EnqueueSFX
pop {r0, pc}
.align 2, 0
_08008B38: .4byte 0x00000180
_08008B3C: .4byte 0xFFFFFE80
_08008B40: .4byte gPlayerState
_08008B44: .4byte gSineTable
_08008B48: .4byte gPlayerState
_08008B4C: .4byte gUnk_02000020
_08008B50: .4byte 0x00004000
_08008B54: .4byte gUnk_08007CAC
_08008B58: .4byte gPlayerEntity
+44
View File
@@ -0,0 +1,44 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ProjectileUpdate
ProjectileUpdate: @ 0x08016AE4
mov r3, lr
push {r3, r4}
adds r4, r0, #0
ldrb r2, [r0, #0xc]
cmp r2, #0
bne _08016AFC
bl ProjectileInit
cmp r0, #0
bne _08016B0A
bl DeleteThisEntity
_08016AFC:
bl EntityIsDeleted
cmp r0, #0
bne _08016B22
adds r0, r4, #0
bl sub_080028E0
_08016B0A:
adds r0, r4, #0
ldrb r1, [r0, #9]
lsls r1, r1, #2
ldr r2, _08016B2C @ =gProjectileFunctions
ldr r1, [r2, r1]
bl _call_via_r1
movs r1, #0x41
movs r3, #0x7f
ldrb r2, [r4, r1]
ands r2, r3
strb r2, [r4, r1]
_08016B22:
adds r0, r4, #0
bl DrawEntity
pop {r3, r4}
bx r3
.align 2, 0
_08016B2C: .4byte gProjectileFunctions
+144
View File
@@ -0,0 +1,144 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
gUnk_08016984:: @ 08016984
.incbin "code_08016984/gUnk_08016984.bin"
.text
non_word_aligned_thumb_func_start GetNextScriptCommandHalfword
GetNextScriptCommandHalfword: @ 0x08016986
ldrh r0, [r0]
bx lr
non_word_aligned_thumb_func_start GetNextScriptCommandHalfwordAfterCommandMetadata
GetNextScriptCommandHalfwordAfterCommandMetadata: @ 0x0801698A
ldrh r0, [r0, #2]
bx lr
non_word_aligned_thumb_func_start GetNextScriptCommandWord
GetNextScriptCommandWord: @ 0x0801698E
ldrh r1, [r0]
ldrh r0, [r0, #2]
lsls r0, r0, #0x10
orrs r0, r1
bx lr
thumb_func_start GetNextScriptCommandWordAfterCommandMetadata
GetNextScriptCommandWordAfterCommandMetadata: @ 0x08016998
ldrh r1, [r0, #2]
ldrh r0, [r0, #4]
lsls r0, r0, #0x10
orrs r0, r1
bx lr
.align 2, 0
gUnk_080169A4::
.byte 0x01, 0xFF, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x01, 0x00
.byte 0xFF, 0x01, 0x00, 0x00, 0x02, 0xFF, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x02
.byte 0x00, 0x00, 0x01, 0x01, 0x02, 0xFF, 0x02, 0xFE, 0xFE, 0x02, 0xFF, 0x03, 0xFD, 0xFF, 0xFE, 0x01
.byte 0x01, 0xFD, 0xFF, 0xFF, 0x03, 0xFE, 0x02, 0x00, 0x00, 0xFF, 0xFE, 0x03, 0xFD, 0x02, 0xFF, 0x00
.byte 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02
.byte 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00
.byte 0x00, 0x00, 0x01, 0x00
thumb_func_start UpdateSpriteForCollisionLayer
UpdateSpriteForCollisionLayer: @ 0x08016A04
movs r1, #0x38
ldrb r1, [r0, r1]
lsls r1, r1, #1
add r3, pc, #0x1C
adds r1, r1, r3
movs r3, #0xc0
ldrb r2, [r0, #0x19]
bics r2, r3
ldrb r3, [r1]
orrs r2, r3
strb r2, [r0, #0x19]
movs r3, #0xc0
ldrb r2, [r0, #0x1b]
bics r2, r3
ldrb r3, [r1, #1]
orrs r2, r3
strb r2, [r0, #0x1b]
bx lr
_08016A28:
.byte 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40
thumb_func_start ResolveCollisionLayer
ResolveCollisionLayer: @ 0x08016A30
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x38
ldrb r0, [r4, r5]
cmp r0, #0
bne _08016A64
ldrh r0, [r4, #0x2e]
ldrh r1, [r4, #0x32]
movs r2, #2
bl GetTileTypeByPos
movs r3, #1
cmp r0, #0
beq _08016A62
bl sub_080B1B54
movs r3, #2
add r1, pc, #0x40
_08016A54:
adds r1, #4
ldrh r2, [r1]
cmp r2, #0
beq _08016A62
cmp r0, r2
bne _08016A54
ldrb r3, [r1, #3]
_08016A62:
strb r3, [r4, r5]
_08016A64:
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
pop {r4, r5, pc}
thumb_func_start sub_08016A6C
sub_08016A6C: @ 0x08016A6C
push {r4, r5, lr}
adds r4, r0, #0
bl sub_080B1AA8
add r1, pc, #0x38
_08016A76:
adds r1, #4
ldrh r2, [r1]
cmp r2, #0
beq _08016A90
cmp r2, r0
bne _08016A76
movs r2, #0x38
ldrb r3, [r4, r2]
ldrb r5, [r1, #2]
cmp r3, r5
beq _08016A90
ldrb r5, [r1, #3]
strb r5, [r4, r2]
_08016A90:
pop {r4, r5, pc}
.align 2, 0
_08016A94:
.byte 0x2A, 0x00, 0x03, 0x03, 0x2D, 0x00, 0x03, 0x03, 0x2B, 0x00, 0x03, 0x03
.byte 0x2C, 0x00, 0x03, 0x03, 0x4C, 0x00, 0x03, 0x03, 0x4E, 0x00, 0x03, 0x03, 0x4D, 0x00, 0x03, 0x03
.byte 0x4F, 0x00, 0x03, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x09, 0x00, 0x02, 0x01, 0x0C, 0x00, 0x01, 0x02
.byte 0x0B, 0x00, 0x01, 0x02, 0x52, 0x00, 0x03, 0x03, 0x27, 0x00, 0x03, 0x03, 0x26, 0x00, 0x03, 0x03
.byte 0x00, 0x00
non_word_aligned_thumb_func_start sub_08016AD2
sub_08016AD2: @ 0x08016AD2
push {r4, lr}
adds r4, r0, #0
bl sub_08016A6C
push {r0}
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
pop {r0, r4, pc}
+475
View File
@@ -0,0 +1,475 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
.ifndef USA
.ifndef DEMO_USA
.ifndef JP
thumb_func_start fill_rq_stack
fill_rq_stack: // fill iqr and user stack with 'MCZ3'
adr r0, 1f
ldm r0!, {r1, r2, r3}
0:
subs r2, #4
str r1, [r2]
cmp r2, r3
bgt 0b
bx lr
// unused
// returns the maximum values reached by irq stack (r0) and usr stack (r1)
check_stack_threshold:
adr r0, 1f
ldm r0!, {r1, r2, r3}
0:
ldr r0, [r3]
adds r3, #4
cmp r0, r1 // cmp against magic
beq 0b
subs r2, #0xa0
0:
ldr r0, [r2]
adds r2, #4
cmp r0, r1 // cmp against magic
beq 0b
subs r1, r2, #4
subs r0, r3, #4
bx lr
.align 2, 0
1:
.byte '3, 'Z, 'C, 'M // r1
.4byte irq_stack_begin // r2
.4byte usr_stack_top // r3
.endif
.endif
.endif
thumb_func_start UpdateScrollVram
UpdateScrollVram: @ 0x08000108
push {r4, lr}
ldr r0, _080001E8 @ =gUpdateVisibleTiles
ldrb r1, [r0]
lsls r1, r1, #2
beq _08000136
add r4, pc, #0x20
ldr r4, [r4, r1]
ldr r0, _080001EC @ =gMapBottom
ldr r0, [r0]
cmp r0, #0
beq _08000126
ldr r0, _080001F0 @ =gMapDataBottomSpecial
ldr r1, _080001F4 @ =gUnk_02021F70
bl _call_via_r4
_08000126:
ldr r0, _080001F8 @ =gMapTop
ldr r0, [r0]
cmp r0, #0
beq _08000136
ldr r0, _080001FC @ =gMapDataTopSpecial
ldr r1, _08000200 @ =gUnk_020344F0
bl _call_via_r4
_08000136:
pop {r4, pc}
_08000138:
_08000138: .4byte ram_sub_080B197C + 1
_0800013C: .4byte sub_0807D280 @ layer 1, 2, 3?
_08000140: .4byte sub_0807D46C
_08000144: .4byte sub_0807D6D8
thumb_func_start sub_08000148
sub_08000148: @ 0x08000148
lsls r2, r2, #2
ldr r3, _08000204 @ =gUnk_08000248
ldr r2, [r3, r2]
strb r0, [r2, r1]
bx lr
non_word_aligned_thumb_func_start sub_08000152
sub_08000152: @ 0x08000152
lsls r2, r2, #2
add r3, pc, #0x68
ldr r3, [r3, r2]
lsls r0, r0, #1
ldrh r0, [r3, r0]
lsrs r2, r2, #2
non_word_aligned_thumb_func_start SetTile
SetTile: @ r0 = tile type, r1, = tile position, r2 = layer
push {r4-r7, lr}
lsls r3, r2, #3
ldr r4, _08000208 @ =gUnk_08000228
ldr r5, [r4, r3]
lsls r6, r1, #1
ldrh r7, [r5, r6]
strh r0, [r5, r6]
ldr r6, _0800020C @ =0x00004000
cmp r0, r6
blo _0800019A
push {r1, r2}
subs r4, r0, r6
ldr r3, _08000210 @ =gUnk_080B7910
ldrb r0, [r3, r4]
bl sub_080001D0
ldr r3, _08000214 @ =gUnk_080B79A7
ldrb r0, [r3, r4]
lsrs r2, r2, #2
bl sub_08000148
pop {r0, r1} @ tilepos, layer
push {r0, r1}
bl DeleteLoadedTileEntity
adds r0, r7, #0
pop {r1, r2}
bl sub_0801AF48
pop {r4, r5, r6, r7, pc}
_0800019A:
adds r3, #4
ldr r4, [r4, r3]
lsls r0, r0, #1
ldrh r4, [r4, r0]
push {r1, r2}
ldr r3, _08000218 @ =gUnk_080B37A0
ldrb r0, [r3, r4]
bl sub_080001D0
ldr r3, _0800021C @ =gUnk_080B3E80
ldrb r0, [r3, r4]
lsrs r2, r2, #2
bl sub_08000148
pop {r0, r1}
bl DeleteLoadedTileEntity
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080001C0: .4byte gUnk_0202BEB4
_080001C4: .4byte gUnk_0202BEB4
_080001C8: .4byte gUnk_02011654
_080001CC: .4byte gUnk_0202BEB4
thumb_func_start sub_080001D0
sub_080001D0: @ 0x080001D0
lsls r2, r2, #2
ldr r3, _08000220 @ =gUnk_08000278
ldr r3, [r3, r2]
strb r0, [r3, r1]
bx lr
non_word_aligned_thumb_func_start GetTileIndex
GetTileIndex: @ 0x080001DA
lsls r1, r1, #3
ldr r2, _08000224 @ =gUnk_08000228
ldr r1, [r2, r1]
lsls r0, r0, #1
ldrh r0, [r1, r0]
bx lr
.align 2, 0
_080001E8: .4byte gUpdateVisibleTiles
_080001EC: .4byte gMapBottom
_080001F0: .4byte gMapDataBottomSpecial
_080001F4: .4byte gUnk_02021F70
_080001F8: .4byte gMapTop
_080001FC: .4byte gMapDataTopSpecial
_08000200: .4byte gUnk_020344F0
_08000204: .4byte gUnk_08000248
_08000208: .4byte gUnk_08000228
_0800020C: .4byte 0x00004000
_08000210: .4byte gUnk_080B7910
_08000214: .4byte gUnk_080B79A7
_08000218: .4byte gUnk_080B37A0
_0800021C: .4byte gUnk_080B3E80
_08000220: .4byte gUnk_08000278
_08000224: .4byte gUnk_08000228
gUnk_08000228::
.4byte gMapDataBottom
gUnk_0800022C::
.4byte gMetatileTypesBottom
.4byte gMapDataBottom
.4byte gMetatileTypesBottom
.4byte gMapDataTop
.4byte gMetatileTypesTop
.4byte gMapDataBottom
.4byte gMetatileTypesBottom
gUnk_08000248::
.4byte gUnk_02027EB4
.4byte gUnk_02027EB4
.4byte gUnk_0200D654
.4byte gUnk_02027EB4
gUnk_08000258::
.4byte gUnk_02028EB4
.4byte gMetatileTypesBottom
.4byte gUnk_02028EB4
.4byte gMetatileTypesBottom
.4byte gUnk_0200E654
.4byte gMetatileTypesTop
.4byte gUnk_02028EB4
.4byte gMetatileTypesBottom
gUnk_08000278::
.4byte gUnk_02030EB4
.4byte gUnk_02030EB4
.4byte gUnk_02016654
.4byte gUnk_02030EB4
@ call 0x80B19CC
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start GetTileAtEntityPos
GetTileAtEntityPos: @ 0x08000288
ldr r3, _080002F4 @ =ram_GetTileAtEntityPos
bx r3
@ call 0x80B19D8
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B19D8
sub_080B19D8: @ 0x0800028C
ldr r3, _080002F8 @ =ram_sub_080B19D8
bx r3
@ call 0x80B19EC
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B19EC
sub_080B19EC: @ 0x08000290
ldr r3, _080002FC @ =ram_sub_080B19EC
bx r3
@ call 0x80B19FC
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B19FC
sub_080B19FC: @ 0x08000294
ldr r3, _08000300 @ =ram_sub_080B19FC
bx r3
@ call 0x80B1A04
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1A04
sub_080B1A04: @ 0x08000298
ldr r3, _08000304 @ =ram_sub_080B1A04
bx r3
@ call 0x80B1A0C
@ r0: entity*
@ r1: s32
@ r2: s32
thumb_func_start sub_080B1A0C
sub_080B1A0C: @ 0x0800029C
ldr r3, _08000308 @ =ram_sub_080B1A0C
bx r3
@ call 0x080B1A28
@ r0: entity
@ return: u32 (tileType)
thumb_func_start GetTileTypeByEntity
GetTileTypeByEntity: @ 0x080002A0
ldr r3, _0800030C @ =ram_GetTileTypeByEntity
bx r3
@ call 0x080B1A34
@ r0: s32 (xPos)
@ r1: s32 (yPos)
@ r2: u32 (layer)
@ return: u32 (tileType)
thumb_func_start GetTileTypeByPos
GetTileTypeByPos: @ 0x080002A4
ldr r3, _08000310 @ =ram_GetTileTypeByPos
bx r3
@ call 0x080B1A48
@ r0: s32 (xPos)
@ r1: s32 (yPos)
@ r2: u32 (layer)
thumb_func_start sub_080B1A48
sub_080B1A48: @ 0x080002A8
ldr r3, _08000314 @ =ram_sub_080B1A48
bx r3
@ call 0x080B1A58
@ r0: s32 (xPos)
@ r1: s32 (yPos)
@ r2: u32 (layer)
thumb_func_start sub_080B1A58
sub_080B1A58: @ 0x080002AC
ldr r3, _08000318 @ =ram_sub_080B1A58
bx r3
@ call 0x080B1A60
@ r0: u32 (tileIndex)
@ r1: u32 (layer)
@ return: u32 (tileType)
thumb_func_start GetTileType
GetTileType: @ 0x080002B0
ldr r3, _0800031C @ =ram_GetTileType
bx r3
@ call 0x080B1A8C
@ r0: Entity*
@ r1: u32
@ r2: u32
thumb_func_start sub_080B1A8C
sub_080B1A8C: @ 0x080002B4
ldr r3, _08000320 @ =ram_sub_080B1A8C
bx r3
@ call 0x080B1AA8
@ r0:
@ r1:
@ r2:
@ return:
@ ========
@ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs.
thumb_func_start sub_080B1AA8
sub_080B1AA8: @ 0x080002B8
ldr r3, _08000324 @ =ram_sub_080B1AA8
bx r3
@ call 0x080B1AB4
@ r0: s32 (xPos)
@ r1: s32 (yPos)
@ r2: u32 (layer)
thumb_func_start sub_080B1AB4
sub_080B1AB4: @ 0x080002BC
ldr r3, _08000328 @ =ram_sub_080B1AB4
bx r3
@ call 0x080B1AC8
@ r0: u32
@ r1: u32
@ r2: u32
@ return: ???
thumb_func_start sub_080B1AC8
sub_080B1AC8: @ 0x080002C0
ldr r3, _0800032C @ =ram_sub_080B1AC8
bx r3
@ call 0x080B1AD8
@ r0: Entity*
@ r1: s32 (xOffset)
@ r2: s32 (yOffset)
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1AD8
sub_080B1AD8: @ 0x080002C4
ldr r3, _08000330 @ =ram_sub_080B1AD8
bx r3
@ call 0x080B1AE0
@ r0: u32 (tileIndex)
@ r1: u32 (layer)
thumb_func_start sub_080B1AE0
sub_080B1AE0: @ 0x080002C8
ldr r3, _08000334 @ =ram_sub_080B1AE0
bx r3
@ call 0x080B1AF0
@ r0: Entity*
@ r1: ???
@ r2: ???
thumb_func_start sub_080B1AF0
sub_080B1AF0: @ 0x080002CC
ldr r3, _08000338 @ =ram_sub_080B1AF0
bx r3
@ call 0x080B1B0C
@ r0: Entity*
thumb_func_start sub_080B1B0C
sub_080B1B0C: @ 0x080002D0
ldr r3, _0800033C @ =ram_sub_080B1B0C
bx r3
@ call 0x080B1B18
@ r0: s32 (xPos)
@ r1: s32 (yPos)
@ r2: u32 (layer)
thumb_func_start sub_080B1B18
sub_080B1B18: @ 0x080002D4
ldr r3, _08000340 @ =ram_sub_080B1B18
bx r3
@ call 0x080B1B2C
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1B2C
sub_080B1B2C: @ 0x080002D8
ldr r3, _08000344 @ =ram_sub_080B1B2C
bx r3
@ call 0x080B1B3C
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1B3C
sub_080B1B3C: @ 0x080002DC
ldr r3, _08000348 @ =ram_sub_080B1B3C
bx r3
@ call 0x080B1B44
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1B44
sub_080B1B44: @ 0x080002E0
ldr r3, _0800034C @ =ram_sub_080B1B44
bx r3
@ call 0x080B1B54
@ r0: u32 (tileIndex)
thumb_func_start sub_080B1B54
sub_080B1B54: @ 0x080002E4
ldr r3, _08000350 @ =ram_sub_080B1B54
bx r3
@ call 0x080B1B68
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
thumb_func_start sub_080B1B68
sub_080B1B68: @ 0x080002E8
ldr r3, _08000354 @ =ram_sub_080B1B68
bx r3
@ call 0x080B1B84
@ r0: u32 (tileIndex)
@ r1: u32 (layer)
thumb_func_start sub_080B1B84
sub_080B1B84: @ 0x080002EC
ldr r3, _08000358 @ =ram_sub_080B1B84
bx r3
@ call 0x080B1BA4
@ r0: u32 (tileIndex)
@ r1: u32 (layer)
@ r2: ???
thumb_func_start sub_080B1BA4
sub_080B1BA4: @ 0x080002F0
ldr r3, _0800035C @ =ram_sub_080B1BA4
bx r3
_080002F4: .4byte ram_GetTileAtEntityPos
_080002F8: .4byte ram_sub_080B19D8
_080002FC: .4byte ram_sub_080B19EC
_08000300: .4byte ram_sub_080B19FC
_08000304: .4byte ram_sub_080B1A04
_08000308: .4byte ram_sub_080B1A0C
_0800030C: .4byte ram_GetTileTypeByEntity
_08000310: .4byte ram_GetTileTypeByPos
_08000314: .4byte ram_sub_080B1A48
_08000318: .4byte ram_sub_080B1A58
_0800031C: .4byte ram_GetTileType
_08000320: .4byte ram_sub_080B1A8C
_08000324: .4byte ram_sub_080B1AA8
_08000328: .4byte ram_sub_080B1AB4
_0800032C: .4byte ram_sub_080B1AC8
_08000330: .4byte ram_sub_080B1AD8
_08000334: .4byte ram_sub_080B1AE0
_08000338: .4byte ram_sub_080B1AF0
_0800033C: .4byte ram_sub_080B1B0C
_08000340: .4byte ram_sub_080B1B18
_08000344: .4byte ram_sub_080B1B2C
_08000348: .4byte ram_sub_080B1B3C
_0800034C: .4byte ram_sub_080B1B44
_08000350: .4byte ram_sub_080B1B54
_08000354: .4byte ram_sub_080B1B68
_08000358: .4byte ram_sub_080B1B84
_0800035C: .4byte ram_sub_080B1BA4