diff options
author | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-11 10:14:59 -0800 |
---|---|---|
committer | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-11 10:14:59 -0800 |
commit | 87ef770ca23875a9b4777bff7b07c2093a1df1b2 (patch) | |
tree | 23e4dbf13078674c809b46083871c62e4c7c732b | |
parent | 041c0891d8516a4c6a60652347ce77de996edb1d (diff) |
decompile util
-rw-r--r-- | asm/util.s | 156 | ||||
-rw-r--r-- | include/util.h | 10 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/util.c | 87 |
4 files changed, 98 insertions, 157 deletions
diff --git a/asm/util.s b/asm/util.s deleted file mode 100644 index 3b3f95a..0000000 --- a/asm/util.s +++ /dev/null @@ -1,156 +0,0 @@ - .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. diff --git a/include/util.h b/include/util.h new file mode 100644 index 0000000..3da2beb --- /dev/null +++ b/include/util.h @@ -0,0 +1,10 @@ +#ifndef GUARD_UTIL_H +#define GUARD_UTIL_H + +void ReverseString(u8 *s, s32 len); +s32 ConvertToDecimal(s32 *decimal, s32 n, s32 len); +s32 ConvertFromDecimal(s32 *decimal, s32 sign, s32 len); +s32 ConvertFromBCD(s32 bcd); +s32 ConvertToBCD(s32 n); + +#endif // GUARD_UTIL_H diff --git a/ld_script.txt b/ld_script.txt index 07163b1..14d1053 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -38,7 +38,7 @@ SECTIONS { asm/memory.o(.text); asm/code_80035F0.o(.text); src/other_random.o(.text); - asm/util.o(.text); + src/util.o(.text); asm/bg_palette_buffer.o(.text); asm/code_80047E8.o(.text); src/random.o(.text); diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..0c9c2dd --- /dev/null +++ b/src/util.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "util.h" + +void ReverseString(u8 *s, s32 len) +{ + u8 *l = s; + s32 right = len - 1; + u8 *r = s + right; + s32 left = 0; + + while (left < right) + { + u8 temp = *l; + *l++ = *r; + *r-- = temp; + left++; + right--; + } +} + +s32 ConvertToDecimal(s32 *decimal, s32 n, s32 len) +{ + s32 sign; + s32 i; + + if (n > 0) + { + sign = 1; + } + else + { + n = -n; + sign = -1; + } + + for (i = 0; i < len; i++) + { + decimal[i] = n % 10; + n /= 10; + } + + return sign; +} + +s32 ConvertFromDecimal(s32 *decimal, s32 sign, s32 len) +{ + s32 i; + s32 powerOfTen; + s32 n = *decimal++; + + for (i = 1, powerOfTen = 10; i < len; i++, powerOfTen *= 10) + { + n += *decimal++ * powerOfTen; + } + + return (sign < 0) ? -n : n; +} + +s32 ConvertFromBCD(s32 bcd) +{ + s32 powerOfTen = 1; + s32 n = 0; + + while (bcd > 0) + { + n += (bcd & 0xF) * powerOfTen; + powerOfTen *= 10; + bcd >>= 4; + } + + return n; +} + +s32 ConvertToBCD(s32 n) +{ + s32 shift = 0; + s32 bcd = 0; + + while (n > 0) + { + bcd += (n % 10) << shift; + shift += 4; + n /= 10; + } + + return bcd; +} |