Subversion Repositories freemyipod

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
273 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
 
24
.section .intvect,"ax",%progbits
25
	ldr pc, =reset_handler
26
	ldr pc, =undef_instr_handler
27
	ldr pc, =syscall_handler
28
	ldr pc, =prefetch_abort_handler
29
	ldr pc, =data_abort_handler
30
	ldr pc, =reserved_handler
31
	ldr pc, =irq_handler
32
	ldr pc, =fiq_handler
33
.ltorg
34
 
35
 
36
.section .inithead,"ax",%progbits
37
.global __start
38
__start:
39
	b	_start
40
 
41
.section .initcode,"ax",%progbits
42
.global _start
43
_start:
44
	mrc	p15, 0, r0,c1,c0
312 theseven 45
	orr	r0, r0, #5
273 theseven 46
	mcr	p15, 0, r0,c1,c0
47
	ldr	r0, =_sramsource
48
	ldr	r1, =_sramstart
49
	ldr	r2, =_sramend
50
.copysram:
51
	cmp	r2, r1
52
	ldrhi	r3, [r0], #4
53
	strhi	r3, [r1], #4
54
	bhi	.copysram
55
	ldr	r0, =_sdramsource
56
	ldr	r1, =_sdramstart
57
	ldr	r2, =_sdramend
58
.copysdram:
59
	cmp	r2, r1
60
	ldrhi	r3, [r0], #4
61
	strhi	r3, [r1], #4
62
	bhi	.copysdram
63
	ldr	r0, =_initbssstart
64
	ldr	r1, =_initbssend
65
	mov	r2, #0
66
.clearinitbss:
67
	cmp	r1, r0
68
	strhi	r2, [r0], #4
69
	bhi	.clearinitbss
70
	ldr	r0, =_ibssstart
71
	ldr	r1, =_ibssend
72
.clearibss:
73
	cmp	r1, r0
74
	strhi	r2, [r0], #4
75
	bhi	.clearibss
76
	ldr	r0, =_bssstart
77
	ldr	r1, =_bssend
78
.clearbss:
79
	cmp	r1, r0
80
	strhi	r2, [r0], #4
81
	bhi	.clearbss
82
	ldr	r1, =0x38200000
83
	ldr	r0, [r1]
84
	orr	r0, r0, #1
85
	bic	r0, r0, #0x10000
86
	str	r0, [r1]
87
.cleancache:
88
	mrc	p15, 0, r15,c7,c10,3
89
	bne	.cleancache
90
	mov	r0, #0
91
	mcr	p15, 0, r0,c7,c10,4
92
	mcr	p15, 0, r0,c7,c5,0
93
	ldr	r1, =0x38200000
94
	ldr	r0, [r1]
95
	orr	r0, r0, #1
96
	bic	r0, r0, #0x10000
97
	str	r0, [r1]
98
	mov	r0, #0
99
	mcr	p15, 0, r0,c7,c5,0
100
	add	r1, r1, #0x00c00000
101
	add	r2, r1, #0x00001000
102
	add	r3, r1, #0x00002000
103
	sub	r4, r0, #1
104
	str	r4, [r1,#0x14]
105
	str	r4, [r2,#0x14]
106
	str	r4, [r1,#0xf00]
107
	str	r4, [r2,#0xf00]
108
	str	r4, [r3,#0x08]
109
	str	r4, [r3,#0x0c]
110
	str	r0, [r1,#0x14]
111
	str	r0, [r2,#0x14]
112
	msr	cpsr_c, #0xd2
113
	ldr	sp, =_irqstackend
114
	msr	cpsr_c, #0xd7
115
	ldr	sp, =_abortstackend
116
	msr	cpsr_c, #0xdb
117
	ldr	sp, =_abortstackend
118
	msr	cpsr_c, #0x1f
119
	ldr	sp, =_initstackend
120
	bl	init
121
	bl	context_switch
122
	mov	r0, #0
123
	ldr	pc, =idleloop
124
.ltorg
125
 
126
 
127
.section .icode, "ax", %progbits
128
.align 2
129
idleloop:
130
	mcr	p15, 0, r0,c7,c0,4
131
	b	idleloop
132
 
133
.global reset
134
.global hang
135
.type reset, %function
136
.type hang, %function
137
reset:
138
	msr	cpsr_c, #0xd3
139
	mov	r0, #0x100000
140
	mov	r1, #0x3c800000
141
	str	r0, [r1]
142
hang:
143
	msr	cpsr_c, #0xd3
283 theseven 144
	mov	r0, #0
273 theseven 145
	mcr	p15, 0, r0,c7,c0,4
146
	b	hang
147
.size reset, .-reset
148
.size hang, .-hang
149
 
150
.type reset_handler, %function
151
reset_handler:
152
	mov	r0, #0
153
	adr	r1, reset_text
154
	b	panic
155
reset_text:
156
	.ascii	"Hit reset vector!\0"
157
.size reset_handler, .-reset_handler
158
 
159
.type undef_instr_handler, %function
160
undef_instr_handler:
161
	mov	r0, #0
162
	adr	r1, undef_instr_text
163
	sub	r2, lr, #4
164
	b	panicf
165
.size undef_instr_handler, .-undef_instr_handler
166
 
167
.type prefetch_abort_handler, %function
168
prefetch_abort_handler:
169
	mov	r0, #0
170
	adr	r1, prefetch_abort_text
171
	sub	r2, lr, #4
172
	b	panicf
173
.size prefetch_abort_handler, .-prefetch_abort_handler
174
 
175
.type data_abort_handler, %function
176
data_abort_handler:
177
	mov	r0, #0
178
	adr	r1, data_abort_text
179
	sub	r2, lr, #4
180
	b	panicf
181
.size data_abort_handler, .-data_abort_handler
182
 
183
.type reserved_handler, %function
184
reserved_handler:
185
	mov	r0, #0
186
	adr	r1, reserved_text
187
	b	panic
188
.size reserved_handler, .-reserved_handler
189
 
190
.type fiq_handler, %function
191
fiq_handler:
192
	mov	r0, #2
193
	adr	r1, fiq_text
194
	b	panic
195
.size fiq_handler, .-fiq_handler
196
 
197
undef_instr_text:
198
	.ascii	"Undefined instruction at %08X!\0"
199
 
200
prefetch_abort_text:
201
	.ascii	"Prefetch abort at %08X!\0"
202
 
203
data_abort_text:
204
	.ascii	"Data abort at %08X!\0"
205
 
206
reserved_text:
207
	.ascii	"Hit reserved exception handler!\0"
208
 
209
fiq_text:
210
	.ascii	"Unhandled FIQ!\0"
211
 
212
syscall_text:
213
	.ascii	"Unhandled syscall!\0"
214
 
215
 
216
.section .icode.usec_timer, "ax", %progbits
217
.align 2
218
.global read_native_timer
219
.type read_native_timer, %function
220
read_native_timer:
221
	ldr	r0, val_3c700000
222
	ldr	r1, [r0,#0xb4]
223
	mov	r0, #0
224
	bx	lr
225
.size read_native_timer, .-read_native_timer
226
 
227
.global read_usec_timer
228
.type read_usec_timer, %function
229
read_usec_timer:
230
	ldr	r0, val_3c700000
231
	ldr	r0, [r0,#0xb4]
232
	bx	lr
233
.size read_usec_timer, .-read_usec_timer
234
 
235
val_3c700000:
236
	.word	0x3c700000