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

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

initial

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