; ; TOPPERS/JSP Kernel ; Toyohashi Open Platform for Embedded Real-Time Systems/ ; Just Standard Profile Kernel ; ; Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory ; Toyohashi Univ. of Technology, JAPAN ; Copyright (C) 2001-2007 by Industrial Technology Institute, ; Miyagi Prefectural Government, JAPAN ; ; 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation ; によって公表されている GNU General Public License の Version 2 に記 ; 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア ; を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, ; 利用と呼ぶ)することを無償で許諾する. ; (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 ; 権表示,この利用条件および下記の無保証規定が,そのままの形でソー ; スコード中に含まれていること. ; (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 ; 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 ; 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 ; の無保証規定を掲載すること. ; (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 ; 用できない形で再配布する場合には,次のいずれかの条件を満たすこ ; と. ; (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 ; 作権表示,この利用条件および下記の無保証規定を掲載すること. ; (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに ; 報告すること. ; (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 ; 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. ; ; 本ソフトウェアは,無保証で提供されているものである.上記著作権者お ; よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も ; 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 ; 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. ; ; @(#) $Id: start.src,v 1.2 2007/03/23 07:59:26 honda Exp $ ; ; H8S用スタートアップモジュール ;  カーネルはアプリケーションとリンクして使用するので、 ;  このモジュールはJSPカーネル起動時のみ使用する。 .CPU 2000A ; STARTOF演算子、SIZEOF演算子を有効にするためのセクション宣言 .SECTION D,DATA,ALIGN=2 .SECTION R,DATA,ALIGN=2 .SECTION B,DATA,ALIGN=2 .SECTION P,CODE,ALIGN=2 .INCLUDE "sys_config.inc" .INCLUDE "cpu_config.inc" .IMPORT _kernel_start .AIFDEF HARDWARE_INIT_HOOK .IMPORT HARDWARE_INIT_HOOK .GLOBAL _clear_b_section .AENDI ; HARDWARE_INIT_HOOK .AIFDEF SOFTWARE_INIT_HOOK .IMPORT SOFTWARE_INIT_HOOK .AENDI ; SOFTWARE_INIT_HOOK .GLOBAL _start _start: ; ; 非タスクコンテキストのスタックポインタをSTACKTOPに初期化する ;  (STACKTOPは、user_config.incで定義) ; ;  プログラムの先頭命令は SP の初期化命令でなければならない。 ;  ハードウェアマニュアル 「4.2.4 リセット直後の割込み」(P90)参照 ; mov.l #STACKTOP, sp ; ; CCRの初期化(割込み禁止) ; ; ・割込み制御モード0 における割込み禁止 (I = 1 ; CCR) ; (cpu_initialize()内で割込み制御モードを変更するまでは、 ; 割込み制御モードは0である。) ; ldc.b #CCR_I, ccr ; ; EXRの初期化 ; ・割込み制御モード2 における割込み禁止 (I2, I1, I0 = 1 ; CCR) ; ・カーネル管理外の割込みも含めて禁止する ; ldc.b #EXR_I_MASK, exr ; ; ハードウェア初期化関数の呼び出し ; ; ハードウェア依存に必要な初期化処理がある場合は, ; ハードウェア初期化関数を用意し、その先頭アドレスを ; HARDWARE_INIT_HOOKマクロとして定義する。 ; 具体的にはROM化の際、RAMを使用可能にするための ; バス・ステート・コントローラの初期化等を行う。 ; ハードウェア初期化関数の実装はsys_support.src 内で行い、 ; HARDWARE_INIT_HOOKマクロをsys_config.incで定義する ; のを標準とする。 start_0: ; 内蔵RAMを使用しない場合は、外部RAMが有効にならないとスタッ ; クエリアが使えない。そのため、戻り番地をスタックに積む ; jsr命令はこのタイミングではまだ使用できない。つまり、 ; HARDWARE_INIT_HOOKへはjmp命令(無条件分岐命令)で分岐し、 ; jmp命令で戻ってくる。 ; (ラベルclear_b_sectionをエクスポートしている。) .AIFDEF HARDWARE_INIT_HOOK jmp @HARDWARE_INIT_HOOK .AENDI ; HARDWARE_INIT_HOOK ; Bセクションをクリア _clear_b_section: start_1: mov.l @_bss_start_k, er0 mov.l @_end_k, er1 sub.l er2, er2 start_2: mov.l er2, @er0 add.l #4, er0 cmp.l er1, er0 blo start_2 ; er1 > er0 ; ; Dセクションを初期化する(ROM化対応). ; ; __idata_start から __idata_end までを,__data_start 以降に ; コピーする. ; ; eepmov.w命令を使う方が効率的だが、最大転送バイト数が ; 65,535バイトに制限されるため、使用していない。 start_3: mov.l @__idata_start_k, er0 mov.l @__idata_end_k, er1 mov.l @__data_start_k, er2 start_4: mov.l @er0+, er4 ; *er2++ = *er0 ++; mov.l er4, @er2 add.l #4, er2 cmp.l er1, er0 blo start_4 ; er1 > er0 ; ; ソフトウェア環境初期化関数の呼び出し ; ; ソフトウェア環境(特にライブラリ)に依存して必要な初期化処 ; 理がある場合は,ソフトウェア環境初期化関数を用意し、その先頭 ; アドレスをSOFTWARE_INIT_HOOKマクロとして定義する。 ; software_init_hook関数の実装はsys_support.src 内で行い、 ; SOFTWARE_INIT_HOOKマクロをuser_config.incで定義する ; のを標準とする。 .AIFDEF SOFTWARE_INIT_HOOK start_5: jsr @SOFTWARE_INIT_HOOK .AENDI ; SOFTWARE_INIT_HOOK ; カーネルを起動する start_6: jmp @_kernel_start .ALIGN 4 _bss_start_k: .DATA.L STARTOF B _end_k: .DATA.L STARTOF B + SIZEOF B __idata_start_k: .DATA.L STARTOF D __idata_end_k: .DATA.L STARTOF D + SIZEOF D __data_start_k: .DATA.L STARTOF R .END