47e4f6ce48
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10842 a1c6a512-1295-4272-9138-f99709370657
123 lines
2.7 KiB
ArmAsm
123 lines
2.7 KiB
ArmAsm
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
|
*
|
|
* All files in this archive are subject to the GNU General Public License.
|
|
* See the file COPYING in the source tree root for full license agreement.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/* Most of the code from this file has now been moved into the target trees */
|
|
|
|
#include "config.h"
|
|
#include "cpu.h"
|
|
|
|
.section .init.text,"ax",@progbits
|
|
|
|
.global start
|
|
start:
|
|
|
|
#if CONFIG_CPU == TCC730
|
|
/* Platform: Gmini 120/SP */
|
|
;; disable all interrupts
|
|
clrsr fe
|
|
clrsr ie
|
|
clrsr te
|
|
ld a14, #0x3F0000
|
|
|
|
ld r5, 0xA5
|
|
ldb @[a14 + 6], r5 ; disable watchdog
|
|
|
|
ld a11, #(_datacopy) ; where the data section is in the flash
|
|
ld a8, #(_datastart) ; destination
|
|
|
|
;; copy data section from flash to ram.
|
|
ld a9, #_datasize
|
|
ld r6, e9
|
|
cmp eq, r6, #0
|
|
brf .data_copy_loop
|
|
cmp eq, r9, #0
|
|
brt .data_copy_end
|
|
.data_copy_loop:
|
|
ldc r2, @a11
|
|
ldw @[a8 + 0], r2
|
|
add a11, #0x2
|
|
add a8, #0x2
|
|
sub r9, #0x2
|
|
sbc r6, #0
|
|
cmp ugt, r6, #0
|
|
brt .data_copy_loop
|
|
cmp ugt, r9, #0
|
|
brt .data_copy_loop
|
|
.data_copy_end:
|
|
|
|
;; zero out bss
|
|
ld r2, #0
|
|
ld a8, #(_bssstart) ; destination
|
|
ld a9, #_bsssize
|
|
ld r6, e9
|
|
|
|
cmp eq, r6, #0
|
|
brf .bss_init_loop
|
|
cmp eq, r9, #0
|
|
brt .bss_init_end
|
|
.bss_init_loop:
|
|
ldw @[a8 + 0], r2
|
|
add a8, #0x2
|
|
sub r9, #0x2
|
|
sbc r6, #0
|
|
cmp ugt, r6, #0
|
|
brt .bss_init_loop
|
|
cmp ugt, r9, #0
|
|
brt .bss_init_loop
|
|
.bss_init_end:
|
|
|
|
;; set stack pointer
|
|
ld a15, _stackend
|
|
|
|
;; go!
|
|
jsr _main
|
|
|
|
;; soft reset
|
|
ld a10, #0
|
|
ldc r10, @a10
|
|
jmp a10
|
|
|
|
|
|
.section .vectors, "ax"
|
|
irq_handler:
|
|
|
|
push r0, r1
|
|
push r2, r3
|
|
push r4, r5
|
|
push r6, r7
|
|
push a8, a9
|
|
push a10, a11
|
|
push a12, a13
|
|
push a14
|
|
ld a13, #0x3f0000
|
|
ldb r0, @[a13 + 0x26]
|
|
add r0, r0
|
|
ld a10, #_interrupt_vector
|
|
ldw a13, @[a10 + r0]
|
|
jsr a13
|
|
pop a14
|
|
pop a13, a12
|
|
pop a11, a10
|
|
pop a9, a8
|
|
pop r7, r6
|
|
pop r5, r4
|
|
pop r3, r2
|
|
pop r1, r0
|
|
ret_irq
|
|
#endif
|