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
@
6
@    This file is part of emBIOS.
7
@
8
@    emBIOS is free software: you can redistribute it and/or
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
@
13
@    emBIOS is distributed in the hope that it will be useful,
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
19
@    along with emBIOS.  If not, see <http://www.gnu.org/licenses/>.
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
91
	moveq	pc, lr
92
	sub	r1, r1, #1
93
	mov	r12, r3
94
renderfillrect_x:
95
	cmp	r12, #0
96
	beq	renderfillrect_y
97
	sub	r12, r12, #1
98
#if (LCD_BYTESPERPIXEL == 1)
99
	strb	r2, [r0], #1
100
#elif (LCD_BYTESPERPIXEL == 2)
101
	strh	r2, [r0], #2
102
#elif (LCD_BYTESPERPIXEL == 4)
103
	str	r2, [r0], #4
104
#else
105
#error Unknown number of bytes per pixel!
106
#endif
107
	b	renderfillrect_x
108
.size renderfillrect, .-renderfillrect
109
 
110
 
111
#if (LCD_BYTESPERPIXEL == 2)
2 theseven 112
.section .icode.renderbmp, "ax", %progbits
113
.align 2
114
.global renderbmp
115
.type renderbmp, %function
116
renderbmp:
138 theseven 117
	mov	r2, r2,lsl#1
116 theseven 118
	ldrh	r3, [r1]
119
	sub	r3, r3, #0x4d00
120
	subs	r3, r3, #0x42
2 theseven 121
	movne	pc, lr
7 theseven 122
	stmfd	sp!, {r4,lr}
116 theseven 123
	ldrh	r4, [r1,#18]
2 theseven 124
	ldrh	r12, [r1,#20]
116 theseven 125
	orr	r4, r4, r12,lsl#16
126
	ldrh	r3, [r1,#22]
2 theseven 127
	ldrh	r12, [r1,#24]
116 theseven 128
	orr	r3, r3, r12,lsl#16
2 theseven 129
	ldrh	lr, [r1,#10]
130
	ldrh	r12, [r1,#12]
131
	orr	lr, lr, r12,lsl#16
132
	add	r1, r1, lr
138 theseven 133
	mul	lr, r2, r3
2 theseven 134
	add	r0, r0, lr
135
renderbmp_row:
116 theseven 136
	mov	r12, r4
137
	sub	r0, r0, r2
2 theseven 138
renderbmp_pixel:
302 theseven 139
#ifdef LCD_BIGENDIAN
2 theseven 140
	ldrb	lr, [r1,#1]
141
	strb	lr, [r0], #1
142
	ldrb	lr, [r1], #2
143
	strb	lr, [r0], #1
302 theseven 144
#else
145
	ldrh	lr, [r1], #2
146
	strh	lr, [r0], #2
147
#endif
2 theseven 148
	subs	r12, r12, #1
149
	bne	renderbmp_pixel
116 theseven 150
	tst	r4, #1
2 theseven 151
	addne	r1, r1, #2
116 theseven 152
	sub	r0, r0, r4,lsl#1
153
	subs	r3, r3, #1
2 theseven 154
	bne	renderbmp_row
7 theseven 155
	ldmfd	sp!, {r4,pc}
2 theseven 156
.size renderbmp, .-renderbmp
157
 
158
 
159
.section .icode.renderchar, "ax", %progbits
160
.align 2
161
.global renderchar
162
.type renderchar, %function
163
renderchar:
7 theseven 164
	stmfd	sp!, {r4-r7,lr}
165
	ldr	r7, [sp,#0x14]
2 theseven 166
	cmn	r2, #1
167
	beq	renderchar_nobg
168
	mov	r6, r0
169
	mov	r4, #8
170
	mov	lr, r2,lsr#16
171
	sub	lr, lr, #0xff00
172
	subs	lr, lr, #0xff
173
	bne	renderchar_opaquerow
174
	mov	r12, r2,lsl#16
175
	mov	r12, r12,lsr#16
176
renderchar_blendrow:
177
	mov	r5, #6
178
renderchar_blendcol:
179
	ldrh	lr, [r6]
331 theseven 180
	movs	lr, lr,lsr#1
181
#ifdef LCD_BIGENDIAN
182
	orrcs	lr, lr, #0x10000
2 theseven 183
	bic	lr, lr, #0x1000
184
	bic	lr, lr, #0x84
331 theseven 185
#else
186
	bic	lr, lr, #0x410
187
#endif
2 theseven 188
	add	lr, lr, r12
189
	strh	lr, [r6], #2
190
	subs	r5, r5, #1
191
	bne	renderchar_blendcol
138 theseven 192
	add	r6, r6, r7,lsl#1
7 theseven 193
	sub	r6, r6, #12
2 theseven 194
	subs	r4, r4, #1
195
	bne	renderchar_blendrow
196
	b	renderchar_nobg
197
renderchar_opaquerow:
198
	mov	r5, #6
199
renderchar_opaquecol:
200
	strh	r2, [r6], #2
201
	subs	r5, r5, #1
202
	bne	renderchar_opaquecol
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_opaquerow
207
renderchar_nobg:
208
	adr	r5, renderchar_font
209
	sub	r3, r3, #0x20
210
	cmp	r3, #0x5f
211
	addcc	r5, r3,lsl#2
212
	addcc	r5, r3
213
	mov	r3, #5
214
renderchar_col:
215
	mov	r6, r0
216
	ldrb	r4, [r5], #1
217
renderchar_row:
218
	tst	r4, #1
219
	strneh	r1, [r6]
138 theseven 220
	add	r6, r6, r7,lsl#1
2 theseven 221
	movs	r4, r4,lsr#1
222
	bne	renderchar_row
223
	add	r0, r0, #2
224
	subs	r3, r3, #1
225
	bne	renderchar_col
226
	add	r0, r0, #2
7 theseven 227
	ldmfd	sp!, {r4-r7,pc}
2 theseven 228
 
229
renderchar_font:
230
	.byte 0, 0, 0, 0, 0
231
	.byte 0, 0, 95, 0, 0
232
	.byte 0, 7, 0, 7, 0
233
	.byte 20, 127, 20, 127, 20
234
	.byte 36, 42, 127, 42, 18
235
	.byte 35, 19, 8, 100, 98
236
	.byte 54, 73, 85, 34, 80
237
	.byte 5, 3, 0, 0, 0
238
	.byte 28, 34, 65, 0, 0
239
	.byte 0, 0, 65, 34, 28
240
	.byte 20, 8, 62, 8, 20
241
	.byte 8, 8, 62, 8, 8
242
	.byte 0, -96, 96, 0, 0
243
	.byte 8, 8, 8, 8, 8
244
	.byte 0, 96, 96, 0, 0
245
	.byte 32, 16, 8, 4, 2
246
	.byte 62, 81, 73, 69, 62
247
	.byte 0, 66, 127, 64, 0
248
	.byte 66, 97, 81, 73, 70
249
	.byte 33, 65, 69, 75, 49
250
	.byte 24, 20, 18, 127, 16
251
	.byte 39, 69, 69, 69, 57
252
	.byte 60, 74, 73, 73, 48
253
	.byte 1, 113, 9, 5, 3
254
	.byte 54, 73, 73, 73, 54
255
	.byte 6, 73, 73, 41, 30
256
	.byte 0, 54, 54, 0, 0
257
	.byte 0, 86, 54, 0, 0
258
	.byte 8, 20, 34, 65, 0
259
	.byte 20, 20, 20, 20, 20
260
	.byte 0, 65, 34, 20, 8
261
	.byte 2, 1, 81, 9, 6
262
	.byte 50, 73, 121, 65, 62
263
	.byte 124, 18, 17, 18, 124
264
	.byte 127, 73, 73, 73, 62
265
	.byte 62, 65, 65, 65, 34
266
	.byte 127, 65, 65, 34, 28
267
	.byte 127, 73, 73, 73, 65
268
	.byte 127, 9, 9, 9, 1
269
	.byte 62, 65, 73, 73, 58
270
	.byte 127, 8, 8, 8, 127
271
	.byte 0, 65, 127, 65, 0
272
	.byte 32, 64, 65, 63, 1
273
	.byte 127, 8, 20, 34, 65
274
	.byte 127, 64, 64, 64, 64
275
	.byte 127, 2, 12, 2, 127
276
	.byte 127, 4, 8, 16, 127
277
	.byte 62, 65, 65, 65, 62
278
	.byte 127, 9, 9, 9, 6
279
	.byte 62, 65, 81, 33, 94
280
	.byte 127, 9, 25, 41, 70
281
	.byte 38, 73, 73, 73, 50
282
	.byte 1, 1, 127, 1, 1
283
	.byte 63, 64, 64, 64, 63
284
	.byte 31, 32, 64, 32, 31
285
	.byte 127, 32, 24, 32, 127
286
	.byte 99, 20, 8, 20, 99
287
	.byte 3, 4, 120, 4, 3
288
	.byte 97, 81, 73, 69, 67
289
	.byte 0, 127, 65, 65, 0
290
	.byte 2, 4, 8, 16, 32
291
	.byte 0, 65, 65, 127, 0
292
	.byte 4, 2, 1, 2, 4
293
	.byte 64, 64, 64, 64, 64
294
	.byte 1, 2, 4, 0, 0
295
	.byte 32, 84, 84, 84, 120
296
	.byte 127, 68, 68, 68, 56
297
	.byte 56, 68, 68, 68, 40
298
	.byte 56, 68, 68, 68, 127
299
	.byte 56, 84, 84, 84, 24
300
	.byte 8, 126, 9, 1, 2
301
	.byte 8, 84, 84, 84, 60
302
	.byte 127, 4, 4, 4, 120
303
	.byte 0, 68, 125, 64, 0
304
	.byte 32, 64, 64, 61, 0
305
	.byte 127, 16, 40, 68, 0
306
	.byte 0, 65, 127, 64, 0
307
	.byte 124, 4, 24, 4, 120
308
	.byte 124, 8, 4, 4, 120
309
	.byte 56, 68, 68, 68, 56
310
	.byte 124, 20, 20, 20, 24
311
	.byte 8, 20, 20, 20, 124
312
	.byte 124, 8, 4, 4, 8
313
	.byte 72, 84, 84, 84, 32
314
	.byte 4, 63, 68, 64, 32
315
	.byte 60, 64, 64, 32, 124
316
	.byte 28, 32, 64, 32, 28
317
	.byte 60, 64, 56, 64, 60
318
	.byte 68, 40, 16, 40, 68
319
	.byte 12, 80, 80, 80, 60
320
	.byte 68, 100, 84, 76, 68
321
	.byte 0, 8, 54, 65, 0
322
	.byte 0, 0, 119, 0, 0
323
	.byte 0, 65, 54, 8, 0
324
	.byte 2, 1, 2, 4, 2
325
.align 2
326
.size renderchar, .-renderchar
138 theseven 327
#else
328
#error Unknown number of bytes per pixel!
329
#endif