summaryrefslogtreecommitdiff
path: root/firmware/target/arm/crt0.S
diff options
context:
space:
mode:
authorMarcoen Hirschberg <marcoen@gmail.com>2006-12-29 02:49:12 +0000
committerMarcoen Hirschberg <marcoen@gmail.com>2006-12-29 02:49:12 +0000
commit295367686ec9855c4d90f68a6003e819fef8e7ab (patch)
treeb4077ffb8d2283bf199ad12a90322be77040c2fd /firmware/target/arm/crt0.S
parent995a804defda23233ccbdd859023f4ba3ecba0bf (diff)
downloadrockbox-295367686ec9855c4d90f68a6003e819fef8e7ab.tar.gz
rockbox-295367686ec9855c4d90f68a6003e819fef8e7ab.zip
merge a big part of the unofficial gigabeat cvs back. Includes working bootloader and rockbox with audio.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11850 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/crt0.S')
-rw-r--r--firmware/target/arm/crt0.S30
1 files changed, 26 insertions, 4 deletions
diff --git a/firmware/target/arm/crt0.S b/firmware/target/arm/crt0.S
index 82b7c31f92..c552e44320 100644
--- a/firmware/target/arm/crt0.S
+++ b/firmware/target/arm/crt0.S
@@ -122,7 +122,26 @@ start:
122/* Code for ARM bootloader targets other than iPod go here */ 122/* Code for ARM bootloader targets other than iPod go here */
123 123
124#if CONFIG_CPU == S3C2440 124#if CONFIG_CPU == S3C2440
125 bl main 125 /* get the high part of our execute address */
126 ldr r2, =0xffffff00
127 and r4, pc, r2
128
129 /* Copy bootloader to safe area - 0x31000000 */
130 mov r5, #0x30000000
131 add r5, r5, #0x1000000
132 ldr r6, = _dataend
133 sub r0, r6, r5 /* length of loader */
134 add r0, r4, r0 /* r0 points to start of loader */
1351:
136 cmp r5, r6
137 ldrcc r2, [r4], #4
138 strcc r2, [r5], #4
139 bcc 1b
140
141 ldr pc, =start_loc /* jump to the relocated start_loc: */
142
143start_loc:
144 bl main
126#endif 145#endif
127 146
128#else /* BOOTLOADER */ 147#else /* BOOTLOADER */
@@ -201,7 +220,10 @@ prefetch_abort_handler:
201fiq_handler: 220fiq_handler:
202 @ Branch straight to FIQ handler in pcm_playback.c. This also handles the 221 @ Branch straight to FIQ handler in pcm_playback.c. This also handles the
203 @ the correct return sequence. 222 @ the correct return sequence.
204 ldr pc, =fiq 223 stmfd sp!, {r0-r7, r12, lr}
224 bl fiq
225 ldmfd sp!, {r0-r7, r12, lr}
226 subs pc, lr, #4
205 227
206data_abort_handler: 228data_abort_handler:
207 sub r0, lr, #8 229 sub r0, lr, #8
@@ -210,9 +232,9 @@ data_abort_handler:
210 232
211irq_handler: 233irq_handler:
212#ifndef STUB 234#ifndef STUB
213 stmfd sp!, {r0-r3, r12, lr} 235 stmfd sp!, {r0-r11, r12, lr}
214 bl irq 236 bl irq
215 ldmfd sp!, {r0-r3, r12, lr} 237 ldmfd sp!, {r0-r11, r12, lr}
216#endif 238#endif
217 subs pc, lr, #4 239 subs pc, lr, #4
218 240