Subversion Repositories freemyipod

Rev

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