diff options
author | Marcoen Hirschberg <marcoen@gmail.com> | 2006-12-29 02:49:12 +0000 |
---|---|---|
committer | Marcoen Hirschberg <marcoen@gmail.com> | 2006-12-29 02:49:12 +0000 |
commit | 295367686ec9855c4d90f68a6003e819fef8e7ab (patch) | |
tree | b4077ffb8d2283bf199ad12a90322be77040c2fd /firmware/target/arm/crt0.S | |
parent | 995a804defda23233ccbdd859023f4ba3ecba0bf (diff) | |
download | rockbox-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.S | 30 |
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 */ | ||
135 | 1: | ||
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 | |||
143 | start_loc: | ||
144 | bl main | ||
126 | #endif | 145 | #endif |
127 | 146 | ||
128 | #else /* BOOTLOADER */ | 147 | #else /* BOOTLOADER */ |
@@ -201,7 +220,10 @@ prefetch_abort_handler: | |||
201 | fiq_handler: | 220 | fiq_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 | ||
206 | data_abort_handler: | 228 | data_abort_handler: |
207 | sub r0, lr, #8 | 229 | sub r0, lr, #8 |
@@ -210,9 +232,9 @@ data_abort_handler: | |||
210 | 232 | ||
211 | irq_handler: | 233 | irq_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 | ||