Fix remote screen check in graphic equalizer, so that it can be used on logf-enabled...
[Rockbox.git] / firmware / crt0.S
blob61a2d63f1ecb8b6649448cdc0bca73365448071b
1 /***************************************************************************
2  *             __________               __   ___.
3  *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
4  *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
5  *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
6  *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
7  *                     \/            \/     \/    \/            \/
8  * $Id$
9  *
10  * Copyright (C) 2002 by Linus Nielsen Feltzing
11  *
12  * All files in this archive are subject to the GNU General Public License.
13  * See the file COPYING in the source tree root for full license agreement.
14  *
15  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16  * KIND, either express or implied.
17  *
18  ****************************************************************************/
20 /* Most of the code from this file has now been moved into the target trees */
22 #include "config.h"
23 #include "cpu.h"
25     .section .init.text,"ax",@progbits
27     .global    start
28 start:
30 #if CONFIG_CPU == TCC730
31     /* Platform:     Gmini 120/SP */
32     ;; disable all interrupts
33     clrsr fe
34     clrsr ie
35     clrsr te
36     ld a14, #0x3F0000
38     ld r5, 0xA5
39     ldb @[a14 + 6], r5    ; disable watchdog
41     ld a11, #(_datacopy)    ; where the data section is in the flash
42     ld a8, #(_datastart)    ; destination
44     ;; copy data section from flash to ram.
45     ld a9, #_datasize
46     ld r6, e9
47     cmp eq, r6, #0
48     brf .data_copy_loop
49     cmp eq, r9, #0
50     brt .data_copy_end
51 .data_copy_loop:
52     ldc r2, @a11
53     ldw @[a8 + 0], r2
54     add a11, #0x2
55     add a8, #0x2
56     sub r9, #0x2
57     sbc r6, #0
58     cmp ugt, r6, #0
59     brt .data_copy_loop
60     cmp ugt, r9, #0
61     brt .data_copy_loop
62 .data_copy_end:
64     ;; zero out bss
65     ld r2, #0
66     ld a8, #(_bssstart)    ; destination
67     ld a9, #_bsssize
68     ld r6, e9
70     cmp eq, r6, #0
71     brf .bss_init_loop
72     cmp eq, r9, #0
73     brt .bss_init_end
74 .bss_init_loop:
75     ldw @[a8 + 0], r2
76     add a8, #0x2
77     sub r9, #0x2
78     sbc r6, #0
79     cmp ugt, r6, #0
80     brt .bss_init_loop
81     cmp ugt, r9, #0
82     brt .bss_init_loop
83 .bss_init_end:
85     ;; set stack pointer
86     ld a15, _stackend
88     ;; go!
89     jsr _main
91     ;; soft reset
92     ld a10, #0
93     ldc r10, @a10
94     jmp a10
97     .section .vectors, "ax"
98 irq_handler:
100     push r0, r1
101     push r2, r3
102     push r4, r5
103     push r6, r7
104     push a8, a9
105     push a10, a11
106     push a12, a13
107     push a14
108     ld a13, #0x3f0000
109     ldb r0, @[a13 + 0x26]
110     add r0, r0
111     ld a10, #_interrupt_vector
112     ldw a13, @[a10 + r0]
113     jsr a13
114     pop a14
115     pop a13, a12
116     pop a11, a10
117     pop a9, a8
118     pop r7, r6
119     pop r5, r4
120     pop r3, r2
121     pop r1, r0
122     ret_irq
123 #endif