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
#if (LCD_BYTESPERPIXEL == 2)
2 theseven 73
.section .icode.renderchar, "ax", %progbits
74
.align 2
75
.global renderchar
76
.type renderchar, %function
77
renderchar:
7 theseven 78
	stmfd	sp!, {r4-r7,lr}
79
	ldr	r7, [sp,#0x14]
2 theseven 80
	cmn	r2, #1
81
	beq	renderchar_nobg
82
	mov	r6, r0
83
	mov	r4, #8
84
	mov	lr, r2,lsr#16
85
	sub	lr, lr, #0xff00
86
	subs	lr, lr, #0xff
87
	bne	renderchar_opaquerow
88
	mov	r12, r2,lsl#16
89
	mov	r12, r12,lsr#16
90
renderchar_blendrow:
91
	mov	r5, #6
92
renderchar_blendcol:
93
	ldrh	lr, [r6]
331 theseven 94
	movs	lr, lr,lsr#1
95
#ifdef LCD_BIGENDIAN
96
	orrcs	lr, lr, #0x10000
2 theseven 97
	bic	lr, lr, #0x1000
98
	bic	lr, lr, #0x84
331 theseven 99
#else
100
	bic	lr, lr, #0x410
101
#endif
2 theseven 102
	add	lr, lr, r12
103
	strh	lr, [r6], #2
104
	subs	r5, r5, #1
105
	bne	renderchar_blendcol
138 theseven 106
	add	r6, r6, r7,lsl#1
7 theseven 107
	sub	r6, r6, #12
2 theseven 108
	subs	r4, r4, #1
109
	bne	renderchar_blendrow
110
	b	renderchar_nobg
111
renderchar_opaquerow:
112
	mov	r5, #6
113
renderchar_opaquecol:
114
	strh	r2, [r6], #2
115
	subs	r5, r5, #1
116
	bne	renderchar_opaquecol
138 theseven 117
	add	r6, r6, r7,lsl#1
7 theseven 118
	sub	r6, r6, #12
2 theseven 119
	subs	r4, r4, #1
120
	bne	renderchar_opaquerow
121
renderchar_nobg:
122
	adr	r5, renderchar_font
123
	sub	r3, r3, #0x20
124
	cmp	r3, #0x5f
125
	addcc	r5, r3,lsl#2
126
	addcc	r5, r3
127
	mov	r3, #5
128
renderchar_col:
129
	mov	r6, r0
130
	ldrb	r4, [r5], #1
131
renderchar_row:
132
	tst	r4, #1
133
	strneh	r1, [r6]
138 theseven 134
	add	r6, r6, r7,lsl#1
2 theseven 135
	movs	r4, r4,lsr#1
136
	bne	renderchar_row
137
	add	r0, r0, #2
138
	subs	r3, r3, #1
139
	bne	renderchar_col
140
	add	r0, r0, #2
7 theseven 141
	ldmfd	sp!, {r4-r7,pc}
2 theseven 142
 
143
renderchar_font:
144
	.byte 0, 0, 0, 0, 0
145
	.byte 0, 0, 95, 0, 0
146
	.byte 0, 7, 0, 7, 0
147
	.byte 20, 127, 20, 127, 20
148
	.byte 36, 42, 127, 42, 18
149
	.byte 35, 19, 8, 100, 98
150
	.byte 54, 73, 85, 34, 80
151
	.byte 5, 3, 0, 0, 0
152
	.byte 28, 34, 65, 0, 0
153
	.byte 0, 0, 65, 34, 28
154
	.byte 20, 8, 62, 8, 20
155
	.byte 8, 8, 62, 8, 8
156
	.byte 0, -96, 96, 0, 0
157
	.byte 8, 8, 8, 8, 8
158
	.byte 0, 96, 96, 0, 0
159
	.byte 32, 16, 8, 4, 2
160
	.byte 62, 81, 73, 69, 62
161
	.byte 0, 66, 127, 64, 0
162
	.byte 66, 97, 81, 73, 70
163
	.byte 33, 65, 69, 75, 49
164
	.byte 24, 20, 18, 127, 16
165
	.byte 39, 69, 69, 69, 57
166
	.byte 60, 74, 73, 73, 48
167
	.byte 1, 113, 9, 5, 3
168
	.byte 54, 73, 73, 73, 54
169
	.byte 6, 73, 73, 41, 30
170
	.byte 0, 54, 54, 0, 0
171
	.byte 0, 86, 54, 0, 0
172
	.byte 8, 20, 34, 65, 0
173
	.byte 20, 20, 20, 20, 20
174
	.byte 0, 65, 34, 20, 8
175
	.byte 2, 1, 81, 9, 6
176
	.byte 50, 73, 121, 65, 62
177
	.byte 124, 18, 17, 18, 124
178
	.byte 127, 73, 73, 73, 62
179
	.byte 62, 65, 65, 65, 34
180
	.byte 127, 65, 65, 34, 28
181
	.byte 127, 73, 73, 73, 65
182
	.byte 127, 9, 9, 9, 1
183
	.byte 62, 65, 73, 73, 58
184
	.byte 127, 8, 8, 8, 127
185
	.byte 0, 65, 127, 65, 0
186
	.byte 32, 64, 65, 63, 1
187
	.byte 127, 8, 20, 34, 65
188
	.byte 127, 64, 64, 64, 64
189
	.byte 127, 2, 12, 2, 127
190
	.byte 127, 4, 8, 16, 127
191
	.byte 62, 65, 65, 65, 62
192
	.byte 127, 9, 9, 9, 6
193
	.byte 62, 65, 81, 33, 94
194
	.byte 127, 9, 25, 41, 70
195
	.byte 38, 73, 73, 73, 50
196
	.byte 1, 1, 127, 1, 1
197
	.byte 63, 64, 64, 64, 63
198
	.byte 31, 32, 64, 32, 31
199
	.byte 127, 32, 24, 32, 127
200
	.byte 99, 20, 8, 20, 99
201
	.byte 3, 4, 120, 4, 3
202
	.byte 97, 81, 73, 69, 67
203
	.byte 0, 127, 65, 65, 0
204
	.byte 2, 4, 8, 16, 32
205
	.byte 0, 65, 65, 127, 0
206
	.byte 4, 2, 1, 2, 4
207
	.byte 64, 64, 64, 64, 64
208
	.byte 1, 2, 4, 0, 0
209
	.byte 32, 84, 84, 84, 120
210
	.byte 127, 68, 68, 68, 56
211
	.byte 56, 68, 68, 68, 40
212
	.byte 56, 68, 68, 68, 127
213
	.byte 56, 84, 84, 84, 24
214
	.byte 8, 126, 9, 1, 2
215
	.byte 8, 84, 84, 84, 60
216
	.byte 127, 4, 4, 4, 120
217
	.byte 0, 68, 125, 64, 0
218
	.byte 32, 64, 64, 61, 0
219
	.byte 127, 16, 40, 68, 0
220
	.byte 0, 65, 127, 64, 0
221
	.byte 124, 4, 24, 4, 120
222
	.byte 124, 8, 4, 4, 120
223
	.byte 56, 68, 68, 68, 56
224
	.byte 124, 20, 20, 20, 24
225
	.byte 8, 20, 20, 20, 124
226
	.byte 124, 8, 4, 4, 8
227
	.byte 72, 84, 84, 84, 32
228
	.byte 4, 63, 68, 64, 32
229
	.byte 60, 64, 64, 32, 124
230
	.byte 28, 32, 64, 32, 28
231
	.byte 60, 64, 56, 64, 60
232
	.byte 68, 40, 16, 40, 68
233
	.byte 12, 80, 80, 80, 60
234
	.byte 68, 100, 84, 76, 68
235
	.byte 0, 8, 54, 65, 0
236
	.byte 0, 0, 119, 0, 0
237
	.byte 0, 65, 54, 8, 0
238
	.byte 2, 1, 2, 4, 2
239
.align 2
240
.size renderchar, .-renderchar
138 theseven 241
#else
242
#error Unknown number of bytes per pixel!
243
#endif