summaryrefslogtreecommitdiff
path: root/asm/util.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/util.s')
-rw-r--r--asm/util.s466
1 files changed, 466 insertions, 0 deletions
diff --git a/asm/util.s b/asm/util.s
new file mode 100644
index 000000000..865e98937
--- /dev/null
+++ b/asm/util.s
@@ -0,0 +1,466 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CreateInvisibleSpriteWithCallback
+CreateInvisibleSpriteWithCallback: @ 806F640
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ ldr r0, =gUnknown_0832A3A8
+ movs r1, 0xF8
+ movs r2, 0xA8
+ movs r3, 0xE
+ bl AddObjectToFront
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r5, =gUnknown_02020630
+ lsls r2, r0, 4
+ adds r2, r0
+ lsls r2, 2
+ adds r3, r2, r5
+ adds r3, 0x3E
+ ldrb r1, [r3]
+ movs r4, 0x4
+ orrs r1, r4
+ strb r1, [r3]
+ adds r5, 0x1C
+ adds r2, r5
+ str r6, [r2]
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ .pool
+ thumb_func_end CreateInvisibleSpriteWithCallback
+
+ thumb_func_start StoreWordInTwoHalfwords
+StoreWordInTwoHalfwords: @ 806F67C
+ strh r1, [r0]
+ lsrs r1, 16
+ strh r1, [r0, 0x2]
+ bx lr
+ thumb_func_end StoreWordInTwoHalfwords
+
+ thumb_func_start LoadWordFromTwoHalfwords
+LoadWordFromTwoHalfwords: @ 806F684
+ ldrh r2, [r0]
+ movs r3, 0x2
+ ldrsh r0, [r0, r3]
+ lsls r0, 16
+ orrs r2, r0
+ str r2, [r1]
+ bx lr
+ thumb_func_end LoadWordFromTwoHalfwords
+
+ thumb_func_start SetBgAffineStruct
+SetBgAffineStruct: @ 806F694
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ ldr r4, [sp, 0x18]
+ ldr r5, [sp, 0x1C]
+ ldr r6, [sp, 0x20]
+ ldr r7, [sp, 0x24]
+ mov r8, r7
+ str r1, [r0]
+ str r2, [r0, 0x4]
+ strh r3, [r0, 0x8]
+ strh r4, [r0, 0xA]
+ strh r5, [r0, 0xC]
+ strh r6, [r0, 0xE]
+ mov r1, r8
+ strh r1, [r0, 0x10]
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end SetBgAffineStruct
+
+ thumb_func_start DoBgAffineSet
+DoBgAffineSet: @ 806F6C0
+ push {r4-r6,lr}
+ mov r6, r8
+ push {r6}
+ sub sp, 0x24
+ mov r8, r0
+ ldr r0, [sp, 0x38]
+ ldr r4, [sp, 0x3C]
+ ldr r5, [sp, 0x40]
+ ldr r6, [sp, 0x44]
+ lsls r6, 16
+ lsrs r6, 16
+ lsls r3, 16
+ asrs r3, 16
+ lsls r0, 16
+ asrs r0, 16
+ str r0, [sp]
+ lsls r4, 16
+ asrs r4, 16
+ str r4, [sp, 0x4]
+ lsls r5, 16
+ asrs r5, 16
+ str r5, [sp, 0x8]
+ str r6, [sp, 0xC]
+ add r0, sp, 0x10
+ bl SetBgAffineStruct
+ add r0, sp, 0x10
+ mov r1, r8
+ movs r2, 0x1
+ bl BgAffineSet
+ add sp, 0x24
+ pop {r3}
+ mov r8, r3
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end DoBgAffineSet
+
+ thumb_func_start CopySpriteTiles
+CopySpriteTiles: @ 806F70C
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x38
+ str r2, [sp, 0x20]
+ adds r4, r3, 0
+ ldr r7, [sp, 0x58]
+ lsls r0, 24
+ lsls r1, 24
+ ldr r2, =gUnknown_0832A3C0
+ lsrs r1, 23
+ lsrs r0, 21
+ adds r1, r0
+ adds r0, r2, 0x1
+ adds r0, r1, r0
+ ldrb r0, [r0]
+ str r0, [sp, 0x24]
+ adds r1, r2
+ ldrb r1, [r1]
+ str r1, [sp, 0x28]
+ movs r0, 0
+ b _0806F88C
+ .pool
+_0806F740:
+ movs r5, 0
+ adds r0, 0x1
+ str r0, [sp, 0x30]
+ b _0806F874
+_0806F748:
+ ldrh r0, [r4]
+ ldr r2, =0x000003ff
+ adds r1, r2, 0
+ ands r1, r0
+ lsls r1, 5
+ mov r8, r1
+ movs r2, 0xC0
+ lsls r2, 4
+ adds r1, r2, 0
+ ands r1, r0
+ mov r2, sp
+ strh r0, [r2, 0x34]
+ cmp r1, 0
+ bne _0806F788
+ ldr r0, [sp, 0x20]
+ add r0, r8
+ adds r1, r7, 0
+ ldr r2, =0x04000008
+ bl CpuSet
+ adds r4, 0x2
+ str r4, [sp, 0x2C]
+ adds r7, 0x20
+ mov r10, r7
+ adds r5, 0x1
+ mov r9, r5
+ b _0806F86A
+ .pool
+_0806F788:
+ movs r0, 0x80
+ lsls r0, 4
+ cmp r1, r0
+ bne _0806F7CC
+ movs r1, 0
+ adds r4, 0x2
+ str r4, [sp, 0x2C]
+ movs r2, 0x20
+ adds r2, r7
+ mov r10, r2
+ adds r5, 0x1
+ mov r9, r5
+_0806F7A0:
+ lsls r4, r1, 24
+ asrs r4, 24
+ movs r0, 0x7
+ subs r0, r4
+ lsls r0, 2
+ add r0, r8
+ ldr r1, [sp, 0x20]
+ adds r0, r1, r0
+ lsls r1, r4, 2
+ adds r1, r7, r1
+ ldr r2, =0x04000001
+ bl CpuSet
+ adds r4, 0x1
+ lsls r4, 24
+ lsrs r1, r4, 24
+ asrs r4, 24
+ cmp r4, 0x7
+ ble _0806F7A0
+ b _0806F86A
+ .pool
+_0806F7CC:
+ movs r1, 0
+ adds r4, 0x2
+ str r4, [sp, 0x2C]
+ movs r2, 0x20
+ adds r2, r7
+ mov r10, r2
+ adds r5, 0x1
+ mov r9, r5
+ movs r0, 0xF
+ mov r12, r0
+_0806F7E0:
+ movs r2, 0
+ lsls r4, r1, 24
+ lsls r0, r4, 2
+ lsrs r0, 24
+ adds r6, r0, 0x3
+ mov r1, r8
+ adds r5, r1, r0
+_0806F7EE:
+ lsls r1, r2, 24
+ asrs r1, 24
+ subs r0, r6, r1
+ mov r2, sp
+ adds r3, r2, r0
+ adds r0, r5, r1
+ ldr r2, [sp, 0x20]
+ adds r0, r2, r0
+ ldrb r2, [r0]
+ mov r0, r12
+ ands r0, r2
+ lsls r0, 4
+ lsrs r2, 4
+ orrs r0, r2
+ strb r0, [r3]
+ adds r1, 0x1
+ lsls r1, 24
+ lsrs r2, r1, 24
+ asrs r1, 24
+ cmp r1, 0x3
+ ble _0806F7EE
+ movs r1, 0x80
+ lsls r1, 17
+ adds r0, r4, r1
+ lsrs r1, r0, 24
+ asrs r0, 24
+ cmp r0, 0x7
+ ble _0806F7E0
+ mov r2, sp
+ ldrh r0, [r2, 0x34]
+ movs r2, 0x80
+ lsls r2, 4
+ ands r0, r2
+ cmp r0, 0
+ beq _0806F860
+ movs r1, 0
+_0806F836:
+ lsls r4, r1, 24
+ asrs r4, 24
+ movs r0, 0x7
+ subs r0, r4
+ lsls r0, 2
+ add r0, sp
+ lsls r1, r4, 2
+ adds r1, r7, r1
+ ldr r2, =0x04000001
+ bl CpuSet
+ adds r4, 0x1
+ lsls r4, 24
+ lsrs r1, r4, 24
+ asrs r4, 24
+ cmp r4, 0x7
+ ble _0806F836
+ b _0806F86A
+ .pool
+_0806F860:
+ mov r0, sp
+ adds r1, r7, 0
+ ldr r2, =0x04000008
+ bl CpuSet
+_0806F86A:
+ ldr r4, [sp, 0x2C]
+ mov r7, r10
+ mov r1, r9
+ lsls r0, r1, 24
+ lsrs r5, r0, 24
+_0806F874:
+ ldr r2, [sp, 0x28]
+ cmp r5, r2
+ bcs _0806F87C
+ b _0806F748
+_0806F87C:
+ movs r0, 0x20
+ ldr r1, [sp, 0x28]
+ subs r0, r1
+ lsls r0, 1
+ adds r4, r0
+ ldr r2, [sp, 0x30]
+ lsls r0, r2, 24
+ lsrs r0, 24
+_0806F88C:
+ ldr r1, [sp, 0x24]
+ cmp r0, r1
+ bcs _0806F894
+ b _0806F740
+_0806F894:
+ add sp, 0x38
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end CopySpriteTiles
+
+ thumb_func_start CountTrailingZeroBits
+CountTrailingZeroBits: @ 806F8A8
+ push {lr}
+ adds r2, r0, 0
+ movs r1, 0
+ movs r3, 0x1
+_0806F8B0:
+ adds r0, r2, 0
+ ands r0, r3
+ cmp r0, 0
+ beq _0806F8BC
+ adds r0, r1, 0
+ b _0806F8CA
+_0806F8BC:
+ lsrs r2, 1
+ adds r0, r1, 0x1
+ lsls r0, 24
+ lsrs r1, r0, 24
+ cmp r1, 0x1F
+ bls _0806F8B0
+ movs r0, 0
+_0806F8CA:
+ pop {r1}
+ bx r1
+ thumb_func_end CountTrailingZeroBits
+
+ thumb_func_start CalcCRC16
+CalcCRC16: @ 806F8D0
+ push {r4-r7,lr}
+ adds r7, r0, 0
+ adds r4, r1, 0
+ ldr r2, =0x00001121
+ movs r3, 0
+ cmp r3, r4
+ bge _0806F91C
+ movs r6, 0x1
+ ldr r0, =0x00008408
+ adds r5, r0, 0
+_0806F8E4:
+ adds r0, r7, r3
+ ldrb r0, [r0]
+ eors r2, r0
+ movs r1, 0
+ adds r3, 0x1
+_0806F8EE:
+ adds r0, r2, 0
+ ands r0, r6
+ cmp r0, 0
+ beq _0806F908
+ lsrs r0, r2, 1
+ eors r0, r5
+ lsls r0, 16
+ lsrs r2, r0, 16
+ b _0806F90A
+ .pool
+_0806F908:
+ lsrs r2, 1
+_0806F90A:
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0x7
+ bls _0806F8EE
+ lsls r0, r3, 16
+ lsrs r3, r0, 16
+ cmp r3, r4
+ blt _0806F8E4
+_0806F91C:
+ mvns r0, r2
+ lsls r0, 16
+ lsrs r0, 16
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end CalcCRC16
+
+ thumb_func_start CalcCRC16WithTable
+CalcCRC16WithTable: @ 806F928
+ push {r4-r6,lr}
+ adds r5, r0, 0
+ adds r4, r1, 0
+ ldr r2, =0x00001121
+ movs r3, 0
+ cmp r3, r4
+ bcs _0806F956
+ ldr r6, =gUnknown_0832A3D8
+_0806F938:
+ lsrs r1, r2, 8
+ adds r0, r5, r3
+ ldrb r0, [r0]
+ eors r2, r0
+ lsls r0, r2, 24
+ lsrs r0, 23
+ adds r0, r6
+ ldrh r0, [r0]
+ adds r2, r0, 0
+ eors r2, r1
+ adds r0, r3, 0x1
+ lsls r0, 16
+ lsrs r3, r0, 16
+ cmp r3, r4
+ bcc _0806F938
+_0806F956:
+ mvns r0, r2
+ lsls r0, 16
+ lsrs r0, 16
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ .pool
+ thumb_func_end CalcCRC16WithTable
+
+ thumb_func_start CalcByteArraySum
+CalcByteArraySum: @ 806F96C
+ push {r4,lr}
+ adds r4, r0, 0
+ movs r3, 0
+ movs r2, 0
+ cmp r3, r1
+ bcs _0806F984
+_0806F978:
+ adds r0, r4, r2
+ ldrb r0, [r0]
+ adds r3, r0
+ adds r2, 0x1
+ cmp r2, r1
+ bcc _0806F978
+_0806F984:
+ adds r0, r3, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end CalcByteArraySum
+
+ .align 2, 0 @ Don't pad with nop.