fix copyright.
[openocd.git] / ecosflash / flash.S
1 /***************************************************************************
2  *   Copyright (C) 2008 √ėyvind Harboe                                      *
3  *   oyvind.harboe@zylin.com                                               *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20 /*
21         Jump table for flash driver
22         
23         Registers in ARM callling convention is to place args in registers 
24         starting at r0.
25         
26         So for:
27         
28         void foo(int a, int b, int c).
29         
30         a=r0
31         b=r1
32         c=r2
33         
34         
35 */
36         .global _stack_base
37         .global _stack_start
38         .global _workarea
39         .global _start
40         .global _start_bss_clear
41 _start:
42         // offset=0
43         // int erase(void *address, int len)
44         ldr     sp,=_stack_start                
45         bl erase
46         nop // Stop CPU here using hw breakpoint
47         
48         // offset=0xc
49         // int program(void *buffer, void *address, int len)    
50         ldr     sp,=_stack_start              
51         bl program
52         nop // Stop CPU here using hw breakpoint
53         
54         // offset=0x18
55         ldr     r0,=_workarea                
56         nop // Stop CPU here using hw breakpoint
57         
58         // offset=0x20
59         // int init() - returns error message if the flash chip can't be detected       
60         ldr     sp,=_stack_start              
61         bl init
62         nop // Stop CPU here using hw breakpoint
63
64     .section ".bss"
65     .balign 4
66 _stack_base:
67         .rept 4096
68         .byte 0
69         .endr
70 _stack_start:
71     .balign 4
72 _workarea:
73         .rept 8192
74         .byte 0
75         .endr
76         // NB!!! we clear bss while the stack is in use, so we start BSS clearing here !!! :-)
77 _start_bss_clear: