Subversion Repositories freemyipod

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 theseven 1
@
2
@
3
@    Copyright 2010 TheSeven
4
@
5
@
427 farthen 6
@    This file is part of emCORE.
2 theseven 7
@
427 farthen 8
@    emCORE is free software: you can redistribute it and/or
2 theseven 9
@    modify it under the terms of the GNU General Public License as
10
@    published by the Free Software Foundation, either version 2 of the
11
@    License, or (at your option) any later version.
12
@
427 farthen 13
@    emCORE is distributed in the hope that it will be useful,
2 theseven 14
@    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
@    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
@    See the GNU General Public License for more details.
17
@
18
@    You should have received a copy of the GNU General Public License
427 farthen 19
@    along with emCORE.  If not, see <http://www.gnu.org/licenses/>.
2 theseven 20
@
21
@
22
 
23
 
138 theseven 24
#define ASM_FILE
25
#include "global.h"
26
 
27
 
28
.section .icode.get_font_width, "ax", %progbits
29
.align 2
30
.global get_font_width
31
.type get_font_width, %function
32
get_font_width:
33
	mov	r0, #6
34
	mov	pc, lr
35
.size get_font_width, .-get_font_width
36
 
37
 
38
.section .icode.get_font_height, "ax", %progbits
39
.align 2
40
.global get_font_height
41
.type get_font_height, %function
42
get_font_height:
43
	mov	r0, #8
44
	mov	pc, lr
45
.size get_font_height, .-get_font_height
46
 
47
 
48
.section .icode.rendertext, "ax", %progbits
49
.align 2
50
.global rendertext
51
.type rendertext, %function
52
rendertext:
53
	stmfd	sp!, {r0-r2,r4,r5,lr}
54
	ldr	r4, [sp,#0x18]
55
	str	r4, [sp,#-4]!
56
	mov	r4, r3
57
	mov	r5, #6 * LCD_BYTESPERPIXEL
58
rendertext_loop:
59
	ldrb	r3, [r4], #1
60
	cmp	r3, #0
61
	beq	rendertext_done
62
	bl	renderchar
63
	ldmed	sp, {r0-r2}
64
	add	r0, r0, r5
65
	str	r0, [sp,#4]
66
	b	rendertext_loop
67
rendertext_done:
68
	ldmfd	sp!, {r0-r5,pc}
69
.size rendertext, .-rendertext
70
 
71
 
72
.section .icode.renderfillrect, "ax", %progbits
73
.align 2
74
.global renderfillrect
75
.type renderfillrect, %function
76
renderfillrect:
77
	ldr	r12, [sp,#8]
78
	mla	r1, r12, r2, r1
79
#if (LCD_BYTESPERPIXEL == 1)
80
	add	r0, r0, r1
81
#elif (LCD_BYTESPERPIXEL == 2)
82
	add	r0, r0, r1,lsl#1
83
#elif (LCD_BYTESPERPIXEL == 4)
84
	add	r0, r0, r1,lsl#2
85
#else
86
#error Unknown number of bytes per pixel!
87
#endif
88
	ldmfd	sp, {r1,r2}
89
renderfillrect_y:
90
	cmp	r1, #0
377 theseven 91
	cmpne	r3, #0
138 theseven 92
	moveq	pc, lr
93
	sub	r1, r1, #1
94
	mov	r12, r3
95
renderfillrect_x:
96
#if (LCD_BYTESPERPIXEL == 1)
97
	strb	r2, [r0], #1
98
#elif (LCD_BYTESPERPIXEL == 2)
99
	strh	r2, [r0], #2
100
#elif (LCD_BYTESPERPIXEL == 4)
101
	str	r2, [r0], #4
102
#else
103
#error Unknown number of bytes per pixel!
104
#endif
377 theseven 105
	subs	r12, r12, #1
106
	bne	renderfillrect_x
107
	ldr	r12, [sp,#8]
108
	sub	r12, r12, r3
109
#if (LCD_BYTESPERPIXEL == 1)
110
	add	r0, r0, r12
111
#elif (LCD_BYTESPERPIXEL == 2)
112
	add	r0, r0, r12,lsl#1
113
#elif (LCD_BYTESPERPIXEL == 4)
114
	add	r0, r0, r12,lsl#2
115
#else
116
#error Unknown number of bytes per pixel!
117
#endif
118
	b	renderfillrect_y
138 theseven 119
.size renderfillrect, .-renderfillrect
120
 
121
 
122
#if (LCD_BYTESPERPIXEL == 2)
2 theseven 123
.section .icode.renderbmp, "ax", %progbits
124
.align 2
125
.global renderbmp
126
.type renderbmp, %function
127
renderbmp:
138 theseven 128
	mov	r2, r2,lsl#1
116 theseven 129
	ldrh	r3, [r1]
130
	sub	r3, r3, #0x4d00
131
	subs	r3, r3, #0x42
2 theseven 132
	movne	pc, lr
7 theseven 133
	stmfd	sp!, {r4,lr}
116 theseven 134
	ldrh	r4, [r1,#18]
2 theseven 135
	ldrh	r12, [r1,#20]
116 theseven 136
	orr	r4, r4, r12,lsl#16
137
	ldrh	r3, [r1,#22]
2 theseven 138
	ldrh	r12, [r1,#24]
116 theseven 139
	orr	r3, r3, r12,lsl#16
2 theseven 140
	ldrh	lr, [r1,#10]
141
	ldrh	r12, [r1,#12]
142
	orr	lr, lr, r12,lsl#16
143
	add	r1, r1, lr
138 theseven 144
	mul	lr, r2, r3
2 theseven 145
	add	r0, r0, lr
146
renderbmp_row:
116 theseven 147
	mov	r12, r4
148
	sub	r0, r0, r2
2 theseven 149
renderbmp_pixel:
302 theseven 150
#ifdef LCD_BIGENDIAN
2 theseven 151
	ldrb	lr, [r1,#1]
152
	strb	lr, [r0], #1
153
	ldrb	lr, [r1], #2
154
	strb	lr, [r0], #1
302 theseven 155
#else
156
	ldrh	lr, [r1], #2
157
	strh	lr, [r0], #2
158
#endif
2 theseven 159
	subs	r12, r12, #1
160
	bne	renderbmp_pixel
116 theseven 161
	tst	r4, #1
2 theseven 162
	addne	r1, r1, #2
116 theseven 163
	sub	r0, r0, r4,lsl#1
164
	subs	r3, r3, #1
2 theseven 165
	bne	renderbmp_row
7 theseven 166
	ldmfd	sp!, {r4,pc}
2 theseven 167
.size renderbmp, .-renderbmp
168
 
169
 
170
.section .icode.renderchar, "ax", %progbits
171
.align 2
172
.global renderchar
173
.type renderchar, %function
174
renderchar:
7 theseven 175
	stmfd	sp!, {r4-r7,lr}
176
	ldr	r7, [sp,#0x14]
2 theseven 177
	cmn	r2, #1
178
	beq	renderchar_nobg
179
	mov	r6, r0
180
	mov	r4, #8
181
	mov	lr, r2,lsr#16
182
	sub	lr, lr, #0xff00
183
	subs	lr, lr, #0xff
184
	bne	renderchar_opaquerow
185
	mov	r12, r2,lsl#16
186
	mov	r12, r12,lsr#16
187
renderchar_blendrow:
188
	mov	r5, #6
189
renderchar_blendcol:
190
	ldrh	lr, [r6]
331 theseven 191
	movs	lr, lr,lsr#1
192
#ifdef LCD_BIGENDIAN
193
	orrcs	lr, lr, #0x10000
2 theseven 194
	bic	lr, lr, #0x1000
195
	bic	lr, lr, #0x84
331 theseven 196
#else
197
	bic	lr, lr, #0x410
198
#endif
2 theseven 199
	add	lr, lr, r12
200
	strh	lr, [r6], #2
201
	subs	r5, r5, #1
202
	bne	renderchar_blendcol
138 theseven 203
	add	r6, r6, r7,lsl#1
7 theseven 204
	sub	r6, r6, #12
2 theseven 205
	subs	r4, r4, #1
206
	bne	renderchar_blendrow
207
	b	renderchar_nobg
208
renderchar_opaquerow:
209
	mov	r5, #6
210
renderchar_opaquecol:
211
	strh	r2, [r6], #2
212
	subs	r5, r5, #1
213
	bne	renderchar_opaquecol
138 theseven 214
	add	r6, r6, r7,lsl#1
7 theseven 215
	sub	r6, r6, #12
2 theseven 216
	subs	r4, r4, #1
217
	bne	renderchar_opaquerow
218
renderchar_nobg:
219
	adr	r5, renderchar_font
220
	sub	r3, r3, #0x20
221
	cmp	r3, #0x5f
222
	addcc	r5, r3,lsl#2
223
	addcc	r5, r3
224
	mov	r3, #5
225
renderchar_col:
226
	mov	r6, r0
227
	ldrb	r4, [r5], #1
228
renderchar_row:
229
	tst	r4, #1
230
	strneh	r1, [r6]
138 theseven 231
	add	r6, r6, r7,lsl#1
2 theseven 232
	movs	r4, r4,lsr#1
233
	bne	renderchar_row
234
	add	r0, r0, #2
235
	subs	r3, r3, #1
236
	bne	renderchar_col
237
	add	r0, r0, #2
7 theseven 238
	ldmfd	sp!, {r4-r7,pc}
2 theseven 239
 
240
renderchar_font:
241
	.byte 0, 0, 0, 0, 0
242
	.byte 0, 0, 95, 0, 0
243
	.byte 0, 7, 0, 7, 0
244
	.byte 20, 127, 20, 127, 20
245
	.byte 36, 42, 127, 42, 18
246
	.byte 35, 19, 8, 100, 98
247
	.byte 54, 73, 85, 34, 80
248
	.byte 5, 3, 0, 0, 0
249
	.byte 28, 34, 65, 0, 0
250
	.byte 0, 0, 65, 34, 28
251
	.byte 20, 8, 62, 8, 20
252
	.byte 8, 8, 62, 8, 8
253
	.byte 0, -96, 96, 0, 0
254
	.byte 8, 8, 8, 8, 8
255
	.byte 0, 96, 96, 0, 0
256
	.byte 32, 16, 8, 4, 2
257
	.byte 62, 81, 73, 69, 62
258
	.byte 0, 66, 127, 64, 0
259
	.byte 66, 97, 81, 73, 70
260
	.byte 33, 65, 69, 75, 49
261
	.byte 24, 20, 18, 127, 16
262
	.byte 39, 69, 69, 69, 57
263
	.byte 60, 74, 73, 73, 48
264
	.byte 1, 113, 9, 5, 3
265
	.byte 54, 73, 73, 73, 54
266
	.byte 6, 73, 73, 41, 30
267
	.byte 0, 54, 54, 0, 0
268
	.byte 0, 86, 54, 0, 0
269
	.byte 8, 20, 34, 65, 0
270
	.byte 20, 20, 20, 20, 20
271
	.byte 0, 65, 34, 20, 8
272
	.byte 2, 1, 81, 9, 6
273
	.byte 50, 73, 121, 65, 62
274
	.byte 124, 18, 17, 18, 124
275
	.byte 127, 73, 73, 73, 62
276
	.byte 62, 65, 65, 65, 34
277
	.byte 127, 65, 65, 34, 28
278
	.byte 127, 73, 73, 73, 65
279
	.byte 127, 9, 9, 9, 1
280
	.byte 62, 65, 73, 73, 58
281
	.byte 127, 8, 8, 8, 127
282
	.byte 0, 65, 127, 65, 0
283
	.byte 32, 64, 65, 63, 1
284
	.byte 127, 8, 20, 34, 65
285
	.byte 127, 64, 64, 64, 64
286
	.byte 127, 2, 12, 2, 127
287
	.byte 127, 4, 8, 16, 127
288
	.byte 62, 65, 65, 65, 62
289
	.byte 127, 9, 9, 9, 6
290
	.byte 62, 65, 81, 33, 94
291
	.byte 127, 9, 25, 41, 70
292
	.byte 38, 73, 73, 73, 50
293
	.byte 1, 1, 127, 1, 1
294
	.byte 63, 64, 64, 64, 63
295
	.byte 31, 32, 64, 32, 31
296
	.byte 127, 32, 24, 32, 127
297
	.byte 99, 20, 8, 20, 99
298
	.byte 3, 4, 120, 4, 3
299
	.byte 97, 81, 73, 69, 67
300
	.byte 0, 127, 65, 65, 0
301
	.byte 2, 4, 8, 16, 32
302
	.byte 0, 65, 65, 127, 0
303
	.byte 4, 2, 1, 2, 4
304
	.byte 64, 64, 64, 64, 64
305
	.byte 1, 2, 4, 0, 0
306
	.byte 32, 84, 84, 84, 120
307
	.byte 127, 68, 68, 68, 56
308
	.byte 56, 68, 68, 68, 40
309
	.byte 56, 68, 68, 68, 127
310
	.byte 56, 84, 84, 84, 24
311
	.byte 8, 126, 9, 1, 2
312
	.byte 8, 84, 84, 84, 60
313
	.byte 127, 4, 4, 4, 120
314
	.byte 0, 68, 125, 64, 0
315
	.byte 32, 64, 64, 61, 0
316
	.byte 127, 16, 40, 68, 0
317
	.byte 0, 65, 127, 64, 0
318
	.byte 124, 4, 24, 4, 120
319
	.byte 124, 8, 4, 4, 120
320
	.byte 56, 68, 68, 68, 56
321
	.byte 124, 20, 20, 20, 24
322
	.byte 8, 20, 20, 20, 124
323
	.byte 124, 8, 4, 4, 8
324
	.byte 72, 84, 84, 84, 32
325
	.byte 4, 63, 68, 64, 32
326
	.byte 60, 64, 64, 32, 124
327
	.byte 28, 32, 64, 32, 28
328
	.byte 60, 64, 56, 64, 60
329
	.byte 68, 40, 16, 40, 68
330
	.byte 12, 80, 80, 80, 60
331
	.byte 68, 100, 84, 76, 68
332
	.byte 0, 8, 54, 65, 0
333
	.byte 0, 0, 119, 0, 0
334
	.byte 0, 65, 54, 8, 0
335
	.byte 2, 1, 2, 4, 2
336
.align 2
337
.size renderchar, .-renderchar
138 theseven 338
#else
339
#error Unknown number of bytes per pixel!
340
#endif