summaryrefslogtreecommitdiff
path: root/asm/util.s
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-11 04:04:42 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-11 04:04:42 -0800
commitb0ef8f839bebb39c1806352cc8f87274927063b6 (patch)
tree173d2f08deb90d2846e2c93bd3c91c3856147332 /asm/util.s
parent9ad5d4888f98d78a09f67db795e5560c0d6b516d (diff)
split files
Diffstat (limited to 'asm/util.s')
-rw-r--r--asm/util.s156
1 files changed, 156 insertions, 0 deletions
diff --git a/asm/util.s b/asm/util.s
new file mode 100644
index 0000000..3b3f95a
--- /dev/null
+++ b/asm/util.s
@@ -0,0 +1,156 @@
+ .include "constants/gba_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start ReverseString
+ReverseString:
+ push {r4,r5,lr}
+ adds r3, r0, 0
+ subs r4, r1, 0x1
+ adds r2, r3, r4
+ movs r5, 0
+ cmp r5, r4
+ bge _08004566
+_08004552:
+ ldrb r1, [r3]
+ ldrb r0, [r2]
+ strb r0, [r3]
+ adds r3, 0x1
+ strb r1, [r2]
+ subs r2, 0x1
+ adds r5, 0x1
+ subs r4, 0x1
+ cmp r5, r4
+ blt _08004552
+_08004566:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end ReverseString
+
+ thumb_func_start ConvertToDecimal
+ConvertToDecimal:
+ push {r4-r7,lr}
+ adds r4, r1, 0
+ cmp r4, 0
+ ble _08004578
+ movs r7, 0x1
+ b _0800457E
+_08004578:
+ negs r4, r4
+ movs r7, 0x1
+ negs r7, r7
+_0800457E:
+ cmp r2, 0
+ ble _080045A0
+ adds r6, r0, 0
+ adds r5, r2, 0
+_08004586:
+ adds r0, r4, 0
+ movs r1, 0xA
+ bl __modsi3
+ stm r6!, {r0}
+ adds r0, r4, 0
+ movs r1, 0xA
+ bl __divsi3
+ adds r4, r0, 0
+ subs r5, 0x1
+ cmp r5, 0
+ bne _08004586
+_080045A0:
+ adds r0, r7, 0
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end ConvertToDecimal
+
+ thumb_func_start ConvertFromDecimal
+ConvertFromDecimal:
+ push {r4,r5,lr}
+ adds r4, r0, 0
+ adds r5, r1, 0
+ ldm r4!, {r1}
+ movs r3, 0xA
+ cmp r2, 0x1
+ ble _080045CA
+ subs r2, 0x1
+_080045B8:
+ ldm r4!, {r0}
+ muls r0, r3
+ adds r1, r0
+ subs r2, 0x1
+ lsls r0, r3, 2
+ adds r0, r3
+ lsls r3, r0, 1
+ cmp r2, 0
+ bne _080045B8
+_080045CA:
+ adds r0, r1, 0
+ cmp r5, 0
+ bge _080045D2
+ negs r0, r0
+_080045D2:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end ConvertFromDecimal
+
+ thumb_func_start ConvertFromBCD
+ConvertFromBCD:
+ push {r4,lr}
+ adds r1, r0, 0
+ movs r2, 0x1
+ movs r3, 0
+ cmp r1, 0
+ ble _080045FA
+ movs r4, 0xF
+_080045E6:
+ adds r0, r1, 0
+ ands r0, r4
+ muls r0, r2
+ adds r3, r0
+ lsls r0, r2, 2
+ adds r0, r2
+ lsls r2, r0, 1
+ asrs r1, 4
+ cmp r1, 0
+ bgt _080045E6
+_080045FA:
+ adds r0, r3, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end ConvertFromBCD
+
+ thumb_func_start ConvertToBCD
+ConvertToBCD:
+ push {r4-r6,lr}
+ adds r4, r0, 0
+ movs r5, 0
+ movs r6, 0
+ cmp r4, 0
+ ble _0800462C
+_08004610:
+ adds r0, r4, 0
+ movs r1, 0xA
+ bl __modsi3
+ lsls r0, r5
+ adds r6, r0
+ adds r5, 0x4
+ adds r0, r4, 0
+ movs r1, 0xA
+ bl __divsi3
+ adds r4, r0, 0
+ cmp r4, 0
+ bgt _08004610
+_0800462C:
+ adds r0, r6, 0
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end ConvertToBCD
+
+ .align 2, 0 @ Don't pad with nop.