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]
180
	tst	lr, #1
181
	orrne	lr, lr, #0x10000
182
	mov	lr, lr,lsr#1
183
	bic	lr, lr, #0x1000
184
	bic	lr, lr, #0x84
185
	add	lr, lr, r12
186
	strh	lr, [r6], #2
187
	subs	r5, r5, #1
188
	bne	renderchar_blendcol
138 theseven 189
	add	r6, r6, r7,lsl#1
7 theseven 190
	sub	r6, r6, #12
2 theseven 191
	subs	r4, r4, #1
192
	bne	renderchar_blendrow
193
	b	renderchar_nobg
194
renderchar_opaquerow:
195
	mov	r5, #6
196
renderchar_opaquecol:
197
	strh	r2, [r6], #2
198
	subs	r5, r5, #1
199
	bne	renderchar_opaquecol
138 theseven 200
	add	r6, r6, r7,lsl#1
7 theseven 201
	sub	r6, r6, #12
2 theseven 202
	subs	r4, r4, #1
203
	bne	renderchar_opaquerow
204
renderchar_nobg:
205
	adr	r5, renderchar_font
206
	sub	r3, r3, #0x20
207
	cmp	r3, #0x5f
208
	addcc	r5, r3,lsl#2
209
	addcc	r5, r3
210
	mov	r3, #5
211
renderchar_col:
212
	mov	r6, r0
213
	ldrb	r4, [r5], #1
214
renderchar_row:
215
	tst	r4, #1
216
	strneh	r1, [r6]
138 theseven 217
	add	r6, r6, r7,lsl#1
2 theseven 218
	movs	r4, r4,lsr#1
219
	bne	renderchar_row
220
	add	r0, r0, #2
221
	subs	r3, r3, #1
222
	bne	renderchar_col
223
	add	r0, r0, #2
7 theseven 224
	ldmfd	sp!, {r4-r7,pc}
2 theseven 225
 
226
renderchar_font:
227
	.byte 0, 0, 0, 0, 0
228
	.byte 0, 0, 95, 0, 0
229
	.byte 0, 7, 0, 7, 0
230
	.byte 20, 127, 20, 127, 20
231
	.byte 36, 42, 127, 42, 18
232
	.byte 35, 19, 8, 100, 98
233
	.byte 54, 73, 85, 34, 80
234
	.byte 5, 3, 0, 0, 0
235
	.byte 28, 34, 65, 0, 0
236
	.byte 0, 0, 65, 34, 28
237
	.byte 20, 8, 62, 8, 20
238
	.byte 8, 8, 62, 8, 8
239
	.byte 0, -96, 96, 0, 0
240
	.byte 8, 8, 8, 8, 8
241
	.byte 0, 96, 96, 0, 0
242
	.byte 32, 16, 8, 4, 2
243
	.byte 62, 81, 73, 69, 62
244
	.byte 0, 66, 127, 64, 0
245
	.byte 66, 97, 81, 73, 70
246
	.byte 33, 65, 69, 75, 49
247
	.byte 24, 20, 18, 127, 16
248
	.byte 39, 69, 69, 69, 57
249
	.byte 60, 74, 73, 73, 48
250
	.byte 1, 113, 9, 5, 3
251
	.byte 54, 73, 73, 73, 54
252
	.byte 6, 73, 73, 41, 30
253
	.byte 0, 54, 54, 0, 0
254
	.byte 0, 86, 54, 0, 0
255
	.byte 8, 20, 34, 65, 0
256
	.byte 20, 20, 20, 20, 20
257
	.byte 0, 65, 34, 20, 8
258
	.byte 2, 1, 81, 9, 6
259
	.byte 50, 73, 121, 65, 62
260
	.byte 124, 18, 17, 18, 124
261
	.byte 127, 73, 73, 73, 62
262
	.byte 62, 65, 65, 65, 34
263
	.byte 127, 65, 65, 34, 28
264
	.byte 127, 73, 73, 73, 65
265
	.byte 127, 9, 9, 9, 1
266
	.byte 62, 65, 73, 73, 58
267
	.byte 127, 8, 8, 8, 127
268
	.byte 0, 65, 127, 65, 0
269
	.byte 32, 64, 65, 63, 1
270
	.byte 127, 8, 20, 34, 65
271
	.byte 127, 64, 64, 64, 64
272
	.byte 127, 2, 12, 2, 127
273
	.byte 127, 4, 8, 16, 127
274
	.byte 62, 65, 65, 65, 62
275
	.byte 127, 9, 9, 9, 6
276
	.byte 62, 65, 81, 33, 94
277
	.byte 127, 9, 25, 41, 70
278
	.byte 38, 73, 73, 73, 50
279
	.byte 1, 1, 127, 1, 1
280
	.byte 63, 64, 64, 64, 63
281
	.byte 31, 32, 64, 32, 31
282
	.byte 127, 32, 24, 32, 127
283
	.byte 99, 20, 8, 20, 99
284
	.byte 3, 4, 120, 4, 3
285
	.byte 97, 81, 73, 69, 67
286
	.byte 0, 127, 65, 65, 0
287
	.byte 2, 4, 8, 16, 32
288
	.byte 0, 65, 65, 127, 0
289
	.byte 4, 2, 1, 2, 4
290
	.byte 64, 64, 64, 64, 64
291
	.byte 1, 2, 4, 0, 0
292
	.byte 32, 84, 84, 84, 120
293
	.byte 127, 68, 68, 68, 56
294
	.byte 56, 68, 68, 68, 40
295
	.byte 56, 68, 68, 68, 127
296
	.byte 56, 84, 84, 84, 24
297
	.byte 8, 126, 9, 1, 2
298
	.byte 8, 84, 84, 84, 60
299
	.byte 127, 4, 4, 4, 120
300
	.byte 0, 68, 125, 64, 0
301
	.byte 32, 64, 64, 61, 0
302
	.byte 127, 16, 40, 68, 0
303
	.byte 0, 65, 127, 64, 0
304
	.byte 124, 4, 24, 4, 120
305
	.byte 124, 8, 4, 4, 120
306
	.byte 56, 68, 68, 68, 56
307
	.byte 124, 20, 20, 20, 24
308
	.byte 8, 20, 20, 20, 124
309
	.byte 124, 8, 4, 4, 8
310
	.byte 72, 84, 84, 84, 32
311
	.byte 4, 63, 68, 64, 32
312
	.byte 60, 64, 64, 32, 124
313
	.byte 28, 32, 64, 32, 28
314
	.byte 60, 64, 56, 64, 60
315
	.byte 68, 40, 16, 40, 68
316
	.byte 12, 80, 80, 80, 60
317
	.byte 68, 100, 84, 76, 68
318
	.byte 0, 8, 54, 65, 0
319
	.byte 0, 0, 119, 0, 0
320
	.byte 0, 65, 54, 8, 0
321
	.byte 2, 1, 2, 4, 2
322
.align 2
323
.size renderchar, .-renderchar
138 theseven 324
#else
325
#error Unknown number of bytes per pixel!
326
#endif