source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/sh2/start.S@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 8.5 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2004 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 * Copyright (C) 2002-2004 by Hokkaido Industrial Research Institute, JAPAN
11 *
12 * 上記著作権者
13は,以下の (1)〜(4) の条件か,Free Software Foundation
14 * によってå…
15¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
16 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
17 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
18å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
19 * 利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
27 * 者
28マニュアルなど)に,上記の著作権表示,この利用条件および下記
29 * の無保証規定を掲載すること.
30 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
31 * 用できない形で再é…
32å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
33 * と.
34 * (a) 再é…
35å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
36マニュアルなど)に,上記の著
37 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
38 * (b) 再é…
39å¸ƒã®å½¢æ…
40‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
41 * 報告すること.
42 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
43 * 害からも,上記著作権者
44およびTOPPERSプロジェクトをå…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
50 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
51 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
52 *
53 * @(#) $Id: start.S,v 1.5 2005/07/06 00:45:07 honda Exp $
54 */
55
56/*
57 * カーネル用のスタートアップモジュール(SH1/2用)
58 */
59
60#define _MACRO_ONLY
61#include <t_config.h>
62
63/*
64 *  例外ベクタの定義(SH1/2用)
65 *   ここではリセット時に必
66要な最低限のベクタしか用意しない
67 *   cpu_initialize()で例外ベクタの移動(VBRの書き換え)を行う
68 */
69#ifdef KERNEL_HAS_A_VECTOR_TABLE
70
71/*
72 * 以下の例外要因でデフォルトとは異なる例外ベクタを定義
73 * する場合は、sys_config.hで該当するマクロを定義する。
74 */
75 .section ".vector","ax"
76 .align 2
77 .long TO_ASM(RESET_VECTOR) /* 0:パワーオンリセット */
78 .long INIT_STACK /* SPの初期値 */
79 .long TO_ASM(RESET_VECTOR) /* 2:マニュアルリセット */
80 .long INIT_STACK /* SPの初期値 */
81 .long TO_ASM(GII_VECTOR) /* 4:一般不当命令 */
82 .long TO_ASM(RESERVED_VECTOR) /* 5:システム予約 */
83 .long TO_ASM(SII_VECTOR) /* 6:スロット不当命令 */
84 .long TO_ASM(RESERVED_VECTOR) /* 7:システム予約 */
85 .long TO_ASM(RESERVED_VECTOR) /* 8:システム予約 */
86 .long TO_ASM(CAE_VECTOR) /* 9:CPUアドレスエラー */
87 .long TO_ASM(DAE_VECTOR) /* 10:DMAアドレスエラー */
88 .long TO_ASM(NMI_VECTOR) /* 11:MNI */
89#endif /* KERNEL_HAS_A_VECTOR_TABLE */
90
91/*
92 * SH1/2用スタートアップモジュール
93 */
94 .global _start
95 .section .text
96 .align 2
97_start:
98 /*
99 * SRを初期化する。(割込み禁止)
100 * IPM=0xe
101 * stub実行時のみIPM=0xfとなる。
102 */
103 mov.l _init_sr,r0
104 ldc r0,sr
105 /*
106 * 非タスクコンテストのスタックをSTACKTOPに初期化する
107 * STACKTOPは、user_config.hで定義
108 */
109 mov.l _stack_k, r15
110
111 /*
112 * _hardware_init_hook を呼び出す。(0でない場合)
113 *
114 * ハードウェア依存に必
115要な初期化処理がある場合は,
116 * hardware_init_hook という関数を用意すればよい.
117 * å…
118·ä½“的にはROM化の際、RAMを使用可能にするための
119 * バスコントローラの初期化等を行う。
120 * sys_support.S 内
121で hardware_init_hook を定義してい
122 * る.
123 */
124start_0:
125 /*
126 * プロセッサ内
127蔵RAMが利用できる場合はそのアドレスを
128 * INNER_RAM_ADDRESSマクロとしてuser_config.hまたは
129 * コンパイラ・オプションで定義する。
130 * (内
131蔵RAMのå…
132ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ãªãã€ã‚¹ã‚¿ãƒƒã‚¯ã®åº•ã§
133 *  ある点に注意)
134 *
135 * その場合、hardware_init_hook()関数をC言語で
136 * 記述してよい。
137 * 一般にC言語の関数呼び出しはスタックを使用するので
138 * バスコントローラの初期化前にできない。
139 */
140#ifdef INNER_RAM_ADDRESS
141 mov.l _inner_ram_address_k, r15
142#endif /* INNER_RAM_ADDRESS */
143 mov.l _hardware_init_k, r0
144 tst r0,r0
145 bt start_1
146 jsr @r0
147 nop
148
149
150 /*
151 * bssセクションをクリア
152 */
153start_1:
154 /*
155 * スタックポインタを外部RAMに再設定する。(上記参ç…
156§ï¼‰
157 */
158#ifdef INNER_RAM_ADDRESS
159 mov.l _stack_k, r15
160#endif /* INNER_RAM_ADDRESS */
161
162 mov.l _bss_start_k,r0
163 mov.l _end_k,r1
164 cmp/eq r0,r1
165 bt start_3
166 mov #0,r2
167start_2:
168 /*
169 * r0のインクリメントが冗長に見えるが
170 * mov.l r4,@r0+命令はない
171 * ディスティネーションのアドレスはディクリメントのみ
172 */
173 mov.l r2,@r0
174 add #4,r0
175 cmp/hi r0,r1
176 bt start_2
177
178 /*
179 * dataセクションを初期化する(ROM化対応).
180 *
181 * __idata_start から __idata_end までを,__data_start 以降に
182 * コピーする.
183 *
184 * デバッグ環境によってはdataセクションの認識に不å…
185·åˆãŒã‚り、
186 * __idata_start番地にダウンロードすべきデータを__data_start
187 * 番地にダウンロードしてしまうものがある。その場合は
188 * OMIT_DATA_SECTION_COPYマクロを定義してやることでこのコピー
189 * 作業を省略する。
190 */
191start_3:
192#ifndef OMIT_DATA_SECTION_COPY /* dataセクションのコピーを行う場合 */
193 mov.l __idata_start_k,r1
194 mov.l __idata_end_k,r2
195 cmp/eq r1,r2
196 bt start_5
197 mov.l __data_start_k,r0
198start_4:
199 mov.l @r1+,r4
200 mov.l r4,@r0
201 cmp/hi r1,r2
202 add #4,r0
203 bt start_4
204#endif /* OMIT_DATA_SECTION_COPY */
205
206 /*
207 * software_init_hook を呼び出す(0 でない場合).
208 *
209 * ソフトウェア環境(特にライブラリ)に依存して必
210要な初期化処
211 * 理がある場合は,software_init_hook という関数を用意すれば
212 * よい.
213 */
214start_5:
215 mov.l _software_init_hook_k, r0
216 tst r0,r0
217 bt start_6
218 jsr @r0
219 nop
220
221
222start_6:
223 /*
224 * カーネルを起動する
225 */
226 ! call the mainline
227 mov.l _kernel_start_k,r0
228 jsr @r0
229 nop
230
231
232 .align 2
233_intnest_k:
234 .long _intnest
235_init_sr:
236 .long MAX_IPM << 4
237_stack_k:
238 .long STACKTOP
239
240
241#ifdef INNER_RAM_ADDRESS
242_inner_ram_address_k:
243 .long INNER_RAM_ADDRESS
244#endif /* INNER_RAM_ADDRESS */
245
246_bss_start_k:
247 .long __bss_start
248
249#ifdef FILL_STACK_WITH_0 /* デバッガでスタック領域を観察し易く */
250 /* するため、非タスクコンテキストの */
251 /* スタック領域も初期化する */
252_end_k:
253 .long STACKTOP
254#else /* スタック領域を初期化しない場合 */
255_end_k: /*  bssセクションだけ初期化する */
256 .long _end
257#endif /* FILL_STACK_WITH_0 */
258
259
260#ifndef OMIT_DATA_SECTION_COPY /* dataセクションのコピーを行う場合 */
261__idata_start_k:
262 .long __idata_start
263__idata_end_k:
264 .long __idata_end
265__data_start_k:
266 .long __data_start
267#endif /* OMIT_DATA_SECTION_COPY */
268
269_kernel_start_k:
270 .long _kernel_start
271_hardware_init_k:
272 .long _hardware_init_hook
273_software_init_hook_k:
274 .long _software_init_hook
275
Note: See TracBrowser for help on using the repository browser.