summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_G2D_g2d_textcanvas.s
blob: 95ebf85a45e6653d2fd058b1675afea4b70b9ec5 (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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
	.include "asm/macros.inc"
	.include "global.inc"

	.section .text

	arm_func_start NNSi_G2dTextCanvasDrawTextRect
NNSi_G2dTextCanvasDrawTextRect: ; 0x020B7168
	stmdb sp!, {r4-r7,lr}
	sub sp, sp, #0xc
	ldr r12, [sp, #0x28]
	mov r7, r0
	mov r6, r1
	mov r5, r2
	mov r4, r3
	ands r0, r12, #0x100
	beq _020B71AC
	ldr r0, [r7, #0x4]
	ldr r1, [r7, #0xc]
	ldr r2, [sp, #0x2c]
	bl NNSi_G2dFontGetTextHeight
	ldr r1, [sp, #0x20]
	sub r0, r1, r0
	add r5, r5, r0
	b _020B71E4
_020B71AC:
	ands r0, r12, #0x80
	beq _020B71E4
	ldr r0, [r7, #0x4]
	ldr r1, [r7, #0xc]
	ldr r2, [sp, #0x2c]
	bl NNSi_G2dFontGetTextHeight
	ldr r2, [sp, #0x20]
	add r1, r0, #0x1
	add r0, r2, #0x1
	add r0, r0, r0, lsr #0x1f
	mov r2, r0, asr #0x1
	add r0, r1, r1, lsr #0x1f
	sub r0, r2, r0, asr #0x1
	add r5, r5, r0
_020B71E4:
	ldr r1, [sp, #0x24]
	ldr r0, [sp, #0x28]
	str r1, [sp, #0x0]
	ldr r12, [sp, #0x2c]
	str r0, [sp, #0x4]
	mov r0, r7
	mov r1, r6
	mov r2, r5
	mov r3, r4
	str r12, [sp, #0x8]
	bl NNSi_G2dTextCanvasDrawTextAlign
	add sp, sp, #0xc
	ldmia sp!, {r4-r7,pc}
	arm_func_end NNSi_G2dTextCanvasDrawTextRect

	arm_func_start NNSi_G2dTextCanvasDrawText
NNSi_G2dTextCanvasDrawText: ; 0x020B7218
	stmdb sp!, {r4-r8,lr}
	sub sp, sp, #0x18
	ldr r4, [sp, #0x34]
	mov r8, r0
	str r4, [sp, #0x0]
	mov r7, r1
	mov r6, r2
	mov r5, r3
	ldr r4, [sp, #0x30]
	ldr r1, [r8, #0x4]
	ldr r2, [r8, #0x8]
	ldr r3, [r8, #0xc]
	add r0, sp, #0xc
	bl NNSi_G2dFontGetTextRect
	ands r0, r4, #0x10
	ldrne r0, [sp, #0xc]
	addne r0, r0, #0x1
	addne r0, r0, r0, lsr #0x1f
	subne r7, r7, r0, asr #0x1
	bne _020B7274
	ands r0, r4, #0x20
	ldrne r0, [sp, #0xc]
	subne r7, r7, r0
_020B7274:
	ands r0, r4, #0x2
	ldrne r0, [sp, #0x10]
	addne r0, r0, #0x1
	addne r0, r0, r0, lsr #0x1f
	subne r6, r6, r0, asr #0x1
	bne _020B7298
	ands r0, r4, #0x4
	ldrne r0, [sp, #0x10]
	subne r6, r6, r0
_020B7298:
	str r5, [sp, #0x0]
	ldr r0, [sp, #0x34]
	str r4, [sp, #0x4]
	str r0, [sp, #0x8]
	ldr r3, [sp, #0xc]
	mov r0, r8
	mov r1, r7
	mov r2, r6
	bl NNSi_G2dTextCanvasDrawTextAlign
	add sp, sp, #0x18
	ldmia sp!, {r4-r8,pc}
	arm_func_end NNSi_G2dTextCanvasDrawText

	arm_func_start NNSi_G2dTextCanvasDrawTextAlign
NNSi_G2dTextCanvasDrawTextAlign: ; 0x020B72C4
	stmdb sp!, {r4-r11,lr}
	sub sp, sp, #0x14
	mov r10, r0
	ldr r4, [r10, #0x4]
	ldr r0, [sp, #0x40]
	ldr r4, [r4, #0x0]
	ldr r5, [r10, #0xc]
	ldrsb r4, [r4, #0x1]
	cmp r0, #0x0
	mov r9, r1
	str r0, [sp, #0xc]
	ldr r0, [sp, #0x38]
	mov r8, r2
	str r0, [sp, #0x38]
	mov r7, r3
	add r6, r5, r4
	addeq sp, sp, #0x14
	ldmeqia sp!, {r4-r11,pc}
	add r0, r7, #0x1
	ldr r1, [sp, #0x3c]
	add r0, r0, r0, lsr #0x1f
	mov r0, r0, asr #0x1
	and r5, r1, #0x800
	and r11, r1, #0x400
	str r0, [sp, #0x8]
	mov r4, #0x0
_020B732C:
	mov r1, r9
	cmp r5, #0x0
	beq _020B7358
	ldr r0, [r10, #0x4]
	ldr r1, [r10, #0x8]
	ldr r2, [sp, #0xc]
	mov r3, r4
	bl NNSi_G2dFontGetStringWidth
	sub r0, r7, r0
	add r1, r9, r0
	b _020B7388
_020B7358:
	cmp r11, #0x0
	beq _020B7388
	ldr r0, [r10, #0x4]
	ldr r1, [r10, #0x8]
	ldr r2, [sp, #0xc]
	mov r3, r4
	bl NNSi_G2dFontGetStringWidth
	add r0, r0, #0x1
	add r1, r0, r0, lsr #0x1f
	ldr r0, [sp, #0x8]
	sub r0, r0, r1, asr #0x1
	add r1, r9, r0
_020B7388:
	ldr r2, [sp, #0xc]
	add r3, sp, #0xc
	str r2, [sp, #0x0]
	str r3, [sp, #0x4]
	ldr r3, [sp, #0x38]
	mov r0, r10
	mov r2, r8
	bl NNSi_G2dTextCanvasDrawString
	ldr r0, [sp, #0xc]
	add r8, r8, r6
	cmp r0, #0x0
	bne _020B732C
	add sp, sp, #0x14
	ldmia sp!, {r4-r11,pc}
	arm_func_end NNSi_G2dTextCanvasDrawTextAlign

	arm_func_start NNSi_G2dTextCanvasDrawString
NNSi_G2dTextCanvasDrawString: ; 0x020B73C0
	stmdb sp!, {r4-r11,lr}
	sub sp, sp, #0xc
	mov r10, r0
	ldr r6, [r10, #0x8]
	ldr r5, [r10, #0x4]
	ldr r4, [sp, #0x30]
	add r0, sp, #0x8
	str r4, [sp, #0x8]
	ldr r4, [r5, #0x4]
	mov r9, r1
	mov r8, r2
	mov r7, r3
	blx r4
	cmp r0, #0x0
	beq _020B743C
	add r11, sp, #0x8
_020B7400:
	cmp r0, #0xa
	beq _020B743C
	str r7, [sp, #0x0]
	str r0, [sp, #0x4]
	ldr r0, [r10, #0x0]
	mov r1, r5
	mov r2, r9
	mov r3, r8
	bl NNS_G2dCharCanvasDrawChar
	add r1, r9, r0
	mov r0, r11
	add r9, r1, r6
	blx r4
	cmp r0, #0x0
	bne _020B7400
_020B743C:
	ldr r1, [sp, #0x34]
	cmp r1, #0x0
	addeq sp, sp, #0xc
	ldmeqia sp!, {r4-r11,pc}
	cmp r0, #0xa
	ldreq r1, [sp, #0x8]
	ldr r0, [sp, #0x34]
	movne r1, #0x0
	str r1, [r0, #0x0]
	add sp, sp, #0xc
	ldmia sp!, {r4-r11,pc}
	arm_func_end NNSi_G2dTextCanvasDrawString