summaryrefslogtreecommitdiff
path: root/asm/util.s
blob: 3b3f95a5a403ba343239024aca689192dc6beb99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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.