diff options
author | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-11 04:04:42 -0800 |
---|---|---|
committer | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-11 04:04:42 -0800 |
commit | b0ef8f839bebb39c1806352cc8f87274927063b6 (patch) | |
tree | 173d2f08deb90d2846e2c93bd3c91c3856147332 /asm/util.s | |
parent | 9ad5d4888f98d78a09f67db795e5560c0d6b516d (diff) |
split files
Diffstat (limited to 'asm/util.s')
-rw-r--r-- | asm/util.s | 156 |
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. |