		TOPPERS/ASPカーネル
		SH12A(GCC)アーキテクチャ依存部 ユーザーズマニュアル

		対応バージョン: Release 1.7.1
		最終更新: 2011年 8月 9日

このドキュメントは，TOPPERS/ASPカーネルのSH12A(GCC)アーキテクチャ依存
部を使用するために必要な事項を説明するものである．
ターゲット依存の事項は、ターゲット依存部のtarget_user.txtに記載してい
るので、こちらも参照のこと。
また、類似のターゲットプロセッサに移植する際は、アーキテクチャ依存部の
設計メモprc_design.txtも参照のこと。

----------------------------------------------------------------------
 TOPPERS/ASP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Advanced Standard Profile Kernel

 Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN
 Copyright (C) 2007-2011 by Industrial Technology Institute,
                                    Miyagi Prefectural Government, JAPAN

 上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
 ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
     権表示，この利用条件および下記の無保証規定が，そのままの形でソー
     スコード中に含まれていること．
 (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
     用できる形で再配布する場合には，再配布に伴うドキュメント（利用
     者マニュアルなど）に，上記の著作権表示，この利用条件および下記
     の無保証規定を掲載すること．
 (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
     用できない形で再配布する場合には，次のいずれかの条件を満たすこ
     と．
   (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
       作権表示，この利用条件および下記の無保証規定を掲載すること．
   (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
       報告すること．
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
     また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
     免責すること．

 本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 の責任を負わない．

----------------------------------------------------------------------

(1) 対応しているプロセッサの種類・構成
    ・プロセッサの名称と対応している構成
    　　プロセッサ：SH1、SH2、SH2A
    　　　　　　　　　動作確認はSH2A（SH7211）で行っている。
    ・アーキテクチャ略称等
    　　・アーキテクチャ略称 sh12a_gcc
	　　・プロセッサ略称：sh12a
	　　・開発環境略称：gcc
	・ターゲット非依存部のバージョン番号
	　　バージョン：1.7.0
	・プロセッサ，チップ，開発環境依存部の構成とバージョン番号
		arch/
			sh12a_gcc/		SH12A(GCC)アーキテクチャ依存部
			　　　　　　　　バージョン：1.7.1
			gcc/			GCC開発環境依存部
			logtrace/		トレースログ記録のサンプルコード
    ・使用するPDIC
		pdic/
			sh/				SHシリーズ用SCIFドライバ
			　　　　　　　　バージョン：1.7.1
　　・依存している個別パッケージのバージョン番号
		SH12A(GCC)アーキテクチャ依存部（バージョン 1.7.1）の個別パッ
		ケージが依存している個別パッケージと，動作確認を行ったバージョ
		ンは次の通り．

	個別パッケージの名称	バージョン	個別パッケージファイル名
	------------------------------------------------------------------
	ターゲット非依存部		1.7.0		asp-1.7.0.tar.gz
	コンフィギュレータ　	1.7.0		cfg-1.7.0.tar.gz

(2) 使用する開発環境と動作検証した条件（バージョン，オプション等）
    　ターゲット依存部のtarget_user.txtを参照

(3) ターゲット定義事項の規定

(3-1) データ型に関する規定

　　・ターゲット依存のデータ型のサイズは次の通り．
    　　ターゲット依存部のtarget_user.txtを参照

　　・ターゲット依存のデータ型の有無は次の通り．
    　　ターゲット依存部のtarget_user.txtを参照

(3-2) 割込み処理に関する規定
	・割込みハンドラ番号と割込み番号の割当て，両者の対応
    　　プロセッサのベクタ番号をそのまま用いる。

	・割込み優先度の段階数（TMIN_INTPRIの値）
    　　デフォルトでは、TMIN_INTPRI=-15としている。（prc_kernel.h）
    　　変更する場合は、target_kernel.hでマクロTMIN_INTPRIを定義する。

	・dis_intとena_intのサポートの有無，その制限事項
    　　サポートしている。
    　　割込み禁止フラグがハードウェアでサポートされていないため、
    　　IPRxレジスタで割込み優先レベルを最低レベル（０）にすることに
    　　より割込み禁止フラグの機能を実現している。しかし、IPRxレジスタ
    　　では複数の割込み番号に対して、（概ね周辺モジュール単位に）一括
    　　して同一の割込み優先レベルを設定する仕様になっている。そのため、
    　　dis_int／ena_intを使用することにより、指定した割込み番号とは異
    　　なる割込み要求ラインについてもいっしょに割込み禁止／許可されて
    　　しまう。
    　　周辺モジュールについては、割込みコントローラではなく周辺モ
    　　ジュール側で割込み要因毎に割込み禁止／許可すれば、この問題を回
    　　避できるが、以下の理由でこの方法は採用していない。
    　　　・OSのオーバーヘッドが大きくなる。
    　　　・同じ割込み番号でも、周辺モジュールの設定によっては、割込み
    　　　　禁止／許可の方法が異なる。

	・CFG_INTの制限事項と拡張（ターゲット定義で使用できる割込み属性）
    　　IRQ割込みに関しては，以下の割込み属性を設定可能である．
    　　（内蔵周辺モジュール割込みに対しては設定できない。）
    　　　　・TA_NEGEDGE	ネガティブエッジトリガ
    　　　　・TA_POSEDGE	ポジティブエッジトリガ（SH2Aのみ）
    　　　　・TA_BOTHEDGE	両エッジトリガ（SH2Aのみ）
    　　　　・TA_LOWLEVEL	ローレベルトリガ
    　　
    　　IRQ割込みに対して、割込み属性を設定しない場合、デフォルトで
    　　ローレベルトリガとして設定される。
    　　
    　　IRQ割込みに対して、割込み属性として単にTA_EDGEを設定した場合
    　　（極性を設定しない場合）、ネガティブエッジトリガとして扱う。
    　　
    　　上記のdis_int／ena_intの制限事項と同じ理由で、下記のように割
    　　込み要求ラインの属性を設定した場合、割込み番号intno1とintno2
    　　がIPRxレジスタの同じ領域に割り当てられていると、(a)行の
    　　TA_ENAINT属性は反映されない。
    　　（カーネル動作開始時に割込み番号intno1の割込み要求ラインの割込
    　　　みが許可されていない。）

　　　　CFG_INT(intno1, { TA_ENAINT, intpri1 });  (a)
　　　　CFG_INT(intno2, { TA_NULL,   intpri2 });  (b)
　　　　ただし、intno1 < intno2 とする。

	・TOPPERS標準割込み処理モデルからのその他の逸脱
    　　・割込みハンドラ入口で必要なIRC操作 i_begin_int()
    　　　　エッジトリガの場合のみ、割込み要求をクリアするのが本則で
    　　　　あるが、トリガ種別（エッジトリガ／レベルトリガ）の判別を
    　　　　行うとオーバーヘッドが大きいので、どちらの場合もクリアし
    　　　　ている。
    　　　　現状では、SH2Aのみ実装されている固有の制限事項である。

(3-3) カーネル管理外の割込みに関する規定
	・TMIN_INTPRIは固定か設定できるか，その設定方法
    　　デフォルトでは、TMIN_INTPRI=-15としている。（prc_kernel.h）
    　　変更する場合は、target_kernel.hでマクロTMIN_INTPRIを定義する。

	・NMI以外にカーネル管理外の割込みを設けるか（設けられるようにするか）
    　　カーネル管理外の割込みをサポートする。

	・カーネル管理外の割込みの設定方法
	　　「TOPPERS新世代カーネル統合仕様書」の「2.7.8 カーネル管理外の
	　　割込みの設定方法」の「(b)カーネル管理外とする割込みをアプリ
	　　ケーションで設定できるようにする」を採用している。
	　　また、NMIについては、カーネル管理外の割込みの割込みに固定して
	　　いる。
	　　
	・カーネル管理外の割込みに対してDEF_INH，CFG_INTをサポートするか
    　　サポートする。

	・カーネル管理外の割込みハンドラが実行開始される時のシステム状態と
	　コンテキスト
	　　　・システム状態
	　　　　　・CPUロックフラグ
	　　　　　　　割込み受付時の値そのまま
	　　　　　・割込み優先度マスク
	　　　　　　　CFG_INTで設定した値
	　　　　　　　（NMIの場合は、-15に固定）
	　　　　　・ディスパッチ禁止フラグ
	　　　　　　　割込み受付時の値そのまま
	　　　・コンテキスト
	　　　　　非タスクコンテキスト
	　　　
	　　　また、スタックの切り替え処理も行う。（NMIを除く。）
	　　　
	・割込みハンドラの終了時に行われる処理
　　　　　割込み優先度マスク、コンテキストを元に戻す。
	　　　また、スタックの切り替え処理も行う。（NMIを除く。）

	・カーネル管理外の割込みハンドラの記述方法
	　　　カーネル管理の割込みハンドラと同様に通常のC言語関数として
	　　　記述できる。（引数、戻り値共にvoid型）

	・カーネル内の割込み出入口処理で起こる可能性のあるCPU例外
	　　CPUアドレスエラー
	　　
	・カーネル管理外の割込みに関する制限事項
	　　NMIの割込みハンドラが未登録の場合、デフォルトの割込みハンドラ
	　　が呼び出される。デフォルトの割込みハンドラは、トレースログ取
	　　得処理（log_inh_enterおよびlog_inh_leave）を呼び出しており、
	　　ポーティングガイド「6.6.7 カーネル管理外の割込み」にある
	　　「NMIの出入口処理では，トレースログ取得処理（log_inh_enterお
	　　よびlog_inh_leave）を呼び出してはならない」という規則から逸脱
	　　している。デフォルトの割込みハンドラからリターンすることはない
	　　（システム終了処理を呼び出す）ため、実質的な問題はないと考えて
	　　いる。

(3-4) CPU例外処理に関する規定
	・CPU例外ハンドラ番号の割当て
    　　プロセッサのベクタ番号をそのまま用いる。
    　　割込みの内，ユーザーブレーク，H-UDIはCPU例外として扱う．

	・割込み優先度マスクをTMIN_INTPRIと同じかそれよりも高い値に設定して
	　いる状態で発生したCPU例外を，カーネル管理外のCPU例外と扱うか
	・カーネル内のCPU例外出入口処理で起こる可能性のあるCPU例外
	　　CPUアドレスエラー

(3-5) 性能評価用システム時刻の参照に関する規定
	・get_utmのサポートの有無，その制限事項
    　　サポートあり

(3-6) 拡張パッケージに関する規定
	・各拡張パッケージのサポートの有無
		- ミューテックス機能拡張パッケージ
    　　　　サポートなし
		- オーバランハンドラ機能拡張パッケージ
    　　　　サポートなし
		- タスク優先度拡張パッケージ
    　　　　サポートなし
		- 制約タスク拡張パッケージ
    　　　　サポートなし
		- 動的生成機能拡張パッケージ
    　　　　サポートなし
	・オーバランハンドラ機能拡張パッケージをサポートする場合に，プロセッ
	　サ時間に指定できる値の最大値（TMAX_OVRTIMの値）
	・動的生成機能拡張パッケージをサポートする場合に，動的メモリ管理の
	　方法

(3-7) その他
	・その他の制限事項
　　　　・FPUの扱い
　　　　　　本カーネルではSH2A-FPUのFPUはサポートしていない．

　　　　・コントロールレジスタの扱い
　　　　　　本カーネルではグローバルベースレジスタGBR、ジャンプテーブル
　　　　　　ベースレジスタTBRはサポートしていない．

　　　　・一般不当命令例外の扱い
　　　　　　一般不当命令例外の場合は戻り番地を2バイト進める必要がある
　　　　　　が対応していない。

　　　　・CPUロック状態のまま、割込みハンドラからリターンした場合、
　　　　　CPUロックを解除せずに、log_inh_leave()を呼び出してる。
　　　　　（割込み元に戻る直前にCPUロックを解除している。）
　　　　　同様にCPU例外ハンドラがCPUロックフラグを変更したままリターン
　　　　　した場合もCPUロックフラグを復元せずに、log_exc_leave()を呼び
　　　　　出してる。（オーバーヘッドが大きくなるため）

　　　　・IRQ割込み端子の初期化（SH2A固有）
　　　　　　本来はCFG_INTで指定されたIRQ入力端子の初期化をカーネル側で
　　　　　　すべきだが、SH2Aでは、IRQ番号から接続先の端子が一意に決ま
　　　　　　らない（複数の端子から選択できる）ため、IRQ入力端子の初期化
　　　　　　はサポートしていない。（端子番号に依存しない割込みコント
　　　　　　ローラの初期化は行っている。）

	・その他の拡張機能
    　　・未登録のCPU例外
    　　　　未登録の例外が発生した場合は，prc_config.c で定義されている
    　　　　default_exc_handler() が呼び出される．default_exc_handler()
    　　　　は，発生したCPU例外のベクタ番号をコンソールに出力した後，
    　　　　target_exit() を呼び出す．

    　　・未登録の割込み
    　　　　未登録の割込みが発生した場合は，prc_config.cで定義されている
    　　　　default_int_handler() が呼び出される．default_int_handler()
    　　　　は，発生した割込みの割込み番号をコンソールに出力した後，
    　　　　target_exit() を呼び出す．
    　　　　ASPカーネルの標準的なデフォルトの割込みハンドラ
    　　　　default_int_handler(void)は引数なし（ポーティングガイド
    　　　　porting.txt 「6.6.5 デフォルトの割込みハンドラ」参照）である
    　　　　が、SH12Aアーキテクチャ依存部では、カーネルから割込み番号を
    　　　　引数と渡されることを想定している。

    　　・シリアルドライバのHEWのI/Oシミュレーション対応
    　　　　「(9) その他の設定の変更方法」を参照

(4) カーネルの起動／終了処理に関する情報
	・用意しているスタートアップモジュールの処理内容
	・スタートアップモジュールからhardware_init_hookを呼び出している場
	　合には，hardware_init_hookをアプリケーションで用意する場合の作成
	　方法や制限事項など
	　　バスステートコントローラが設定されていないため、そのままでは
	　　スタックエリアにアクセスしてはいけない。

	・カーネルを終了した後の振舞い
	　　target_exit()から、プロセッサ依存の終了処理prc_exit()と
	　　開発環境依存の終了処理を呼び出す。「開発環境依存の終了処理」に
	　　ついては、ターゲット依存部のtarget_user.txtを参照

(5) メモリマップ
	・デフォルトのメモリマップ，その変更方法
    　　ターゲット依存部のtarget_user.txtを参照

(6) タイマドライバ関連の情報
	・タイムティックの周期，その変更方法
    　　ターゲット依存部のtarget_user.txtを参照
	・使用するリソース（タイマ）
    　　ターゲット依存部のtarget_user.txtを参照
	・タイマ割込みの割込み優先度の変更方法
    　　ターゲット依存部のtarget_user.txtを参照
	・オーバランタイマ割込みの割込み優先度の変更方法
	　　サポートなし

(7) シリアルインタフェースドライバの情報
	・使用するリソース（SIOコントローラ）
    　　ターゲット依存部のtarget_user.txtを参照
	・通信パラメータ（ボーレート，ビット数，パリティの有無，ストップビット）
    　　ターゲット依存部のtarget_user.txtを参照

(8) システムログ機能の情報
	・システムログの低レベル出力の実現方法
    　　ターゲット依存部のtarget_user.txtを参照
	・通信パラメータ（ボーレート，ビット数，パリティの有無，ストップビット）
    　　ターゲット依存部のtarget_user.txtを参照

(9) その他の設定の変更方法

幾つかのパラメータは変更可能になっている．設定ファイル毎に設定可能項目
は次のようになっている．
Makefile.prcを編集した場合は、make realcleanとmake dependを再度、
実行すること。

●Makefileの設定項目
　　メモリマップに関する設定項目は「(5) メモリマップ」を参照。

    　　　　・マクロUSE_BANKED_REG（SH2A固有）
    　　　　　　マクロUSE_BANKED_REGが定義されると、割込みの出入口処理
    　　　　　　でレジスタバンクを使用する。
    　　　　　　定義場所：Makefile.sh2a　15行目付近
    　　　　　　　　　　　　CDEFS := $(CDEFS) -DUSE_BANKED_REG

    　　　　・マクロOMIT_POWER_CONTROL
    　　　　　　Makefile.targetで定義されることを想定している。
    　　　　　　ディスパッチャの出口で実行すべきタスクがない
    　　　　　　(schedtsk==NULL）場合は、sleep命令によってプロセッサを
    　　　　　　省電力モードに切り替えて割込み待ちをしている。
    　　　　　　マクロOMIT_POWER_CONTROLを定義すると、省電力モードに
    　　　　　　切り替えずにビジーループで割込みを待つ。
    　　　　　　（prc_support.Sの_dispatcher_2付近を参照）

    　　　　・マクロENABLE_CACHE
    　　　　・マクロCCR1
    　　　　　　（SH2A固有。ただし、sh7211を除く。）
    　　　　　　Makefile.targetで定義されることを想定している。
    　　　　　　ターゲット依存部でマクロENABLE_CACHEと定義すると
    　　　　　　start.S内にあるキャッシュの初期化ルーチンが有効になる。
    　　　　　　その際、ターゲット依存で、CCR1レジスタの初期値をマクロ
    　　　　　　CCR1_INITとして定義すること。
    　　　　
    　　　　　制限事項
    　　　　　　上記のキャッシュの初期化ルーチンは動作確認していない。
    　　　　　　（sh7211にはCCR1レジスタがないため）

    　　　　・マクロTOPPERS_HEW_SIMULATOR
    　　　　　　Makefile.targetで定義されることを想定している。
    　　　　　　このマクロが定義されると、シリアルドライバがHEWのI/O
    　　　　　　シミュレーションに対応したコードに置き換わる。
    　　　　　　シリアル送信はHEWのI/Oシミュレーション・ウィンドウに
    　　　　　　表示され（すべてポーリングになる）、シリアル受信はHEW
    　　　　　　のI/Oシミュレーションの擬似割込み機能により再現する。
    　　　　　　受信するキャラクタは、HEWのI/Oシミュレーション・ウィン
    　　　　　　ドウにカーソルを一番下の行に移動してから入力することに
    　　　　　　より指定する。（詳細はHEWのシミュレータ／デバッガのユー
    　　　　　　ザーズ・マニュアルを参照のこと）
    　　　　　　HEWのI/Oシミュレーション機能を利用するには、start.Sの
    　　　　　　ラベル_hew_io_sim_bodyをHEWに登録する必要がある。
    　　　　　　（ターゲットapsh2a_gccにおける動作確認時には0x0C00048E
    　　　　　　　番地を登録した。）
    　　　　　　
    　　　　　　設定箇所
    　　　　　　　基本設定メニュー
    　　　　　　　　　シミュレータ
    　　　　　　　　　　システム
    　　　　　　　　　　　「システム」タブ
    　　　　　　　　　　　　　I/Oシミュレーション・アドレス
    　　　　　　　　　　　　　（「有効」チェックボックスで有効を指定する）

    　　　　　　備考
    　　　　　　　HEWのシミュレータは、sleep命令の実行でブレークする
    　　　　　　　仕様になっている。（割込み待ちにならない。）
    　　　　　　　これでは、時間経過によるタイマ割込みがシミュレート
    　　　　　　　できないので、マクロTOPPERS_HEW_SIMULATORが定義され
    　　　　　　　る場合は、マクロOMIT_POWER_CONTROLも定義し、
    　　　　　　　prc_support.Sの_dispatcher_2付近のsleep命令を実行し
    　　　　　　　ないようにしている。

●target_config.hの設定項目

　　・割込みを許可するldc命令の遅延について
　　　　以下のマクロを定義する。
　　　　・LDC_NOP_DISPATCHER
    　　　　　実行すべきタスクが存在しない場合の割込み発生待ちに挿入
    　　　　　するnop命令
    　　　　　　・マクロOMIT_POWER_CONTROLが定義され、sleep命令を使用
　　　　　　　　　しない場合に有効である。
　　　　　　　　・キャッシュ無効時も必要に応じて定義する。
　　　　　　　　　（アクセス速度の速いSRAM上に命令コードを配置する場合
　　　　　　　　　　など）
　　　　　　　定義場所：target_config.h
　　　　・LDC_NOP_SET_SR
　　　　　　　set_sr()に挿入するnop命令
　　　　　　　定義場所：target_config.h
　　　　・LDC_NOP_SIL_SET_IIPM
　　　　　　　SIL_UNL_INT()に挿入するnop命令
　　　　　　　定義場所：target_sil.h

    　　詳しくはprc_design.txtの「●割込み許可区間が短い場合の注意事項
   　　（SH2Aコア固有）」およびターゲット依存部のtarget_user.txtを参照

(10) システム構築手順
    　　ターゲット依存部のtarget_user.txt および
    　　doc/user.txtの「３．クイックスタートガイド」を参照。

(11) ターゲットシステム固有の注意事項
	・タスクコンテキストに含まれるレジスタ，含まれないレジスタ
 	　　以下のレジスタがタスクコンテキストに含まれる．
	  　　・汎用レジスタR0〜R15
	  　　・ステータスレジスタSR
	  　　・積和レジスタMACH、MACL
	  　　・プロシージャレジスタPR
	  　　・プログラムカウンタPC

(12) 類似のターゲットにポーティングする開発者向けの参考情報
　　　　アーキテクチャ依存部の設計メモprc_design.txtを参照

(13) ディレクトリ構成・ファイル構成

 	arch/sh12a_gcc/		SH12A(GCC)アーキテクチャ依存部
		Makefile.prc			Makefileのアーキテクチャ依存部
		prc_stddef.h			t_stddef.hのアーキテクチャ依存部
		prc_sil.h				sil.hのアーキテクチャ依存部
		prc_kernel.h			kernel.hのアーキテクチャ依存部
		prc_syssvc.h			kernel_syssvc.hのアーキテクチャ依存部
		prc_config.h			カーネル実装のアーキテクチャ依存部
		prc_config.c			カーネル実装のアーキテクチャ依存部関連
								の定義
		prc_support.S			カーネル実装のアーキテクチャ依存部関連
								の定義（アセンブリ言語）
		prc_rename.def			アーキテクチャ依存部の内部識別名のリネー
								ム定義
		prc_rename.h			アーキテクチャ依存部の内部識別名のリネー
								ム
		prc_unrename.h			アーキテクチャ依存部の内部識別名のリネー
								ム解除
		prc_cmt.cfg				タイマドライバのコンフィギュレーション
								ファイル
		prc_cmt.h				タイマドライバを使用するための定義
		prc_cmt.c				タイマドライバ
		prc_def.csv				コンフィギュレータの値取得シンボルテー
								ブルのアーキテクチャ依存部
		prc.tf					kernel.tfのアーキテクチャ依存部
		prc_check.tf			kernel_check.tfのアーキテクチャ依存部
		prc_offset.tf			genoffset.tfのアーキテクチャ依存部
		prc_cfg1_out.h			cfg1_out.cのリンクに必要なスタブの定義
		prc_test.h				テストプログラムのアーキテクチャ依存
								定義
		prc_insn.h				アーキテクチャの特殊命令のインライン
								関数定義
		start.S					スタートアップルーチン
		shelf.ld				リンクスクリプト

		Makefile.sh2a			Makefileのコア依存部（SH2A用）
		sh2a.tf					kernel.tfのコア依存部（SH2A用）
		sh2a_config.h			コア依存モジュール（SH2A用）
		sh7211.tf				kernel.tfのチップ依存部（SH7211用）
		sh7211.h				SH7211のハードウェア資源の定義
		sh7211_config.h			チップ依存モジュール（SH7211用）

		prc_user.txt			アーキテクチャ依存部のユーザーズマニュ
								アル
		prc_design.txt			アーキテクチャ依存部の設計メモ
		MANIFEST				個別パッケージのファイルリスト

	pdic/sh/				　SH SCIF用 簡易SIOドライバ
		sh_sci.h				SCIFドライバの定義
		sh_sci.c				SCIFドライバ本体

(14) バージョン履歴

'11/08/09 Release1.7.1
　・initialize_exception()
　　　インライン関数から通常の関数に変更
　　　（asp/kernel/exception.hでのプロトタイプ宣言との不整合を解消）

'11/08/03 
　・sh7211.tf
　　　INTNO_VALIDに割込み番号192が含まれていない不具合を修正

'11/07/22 
　・関数のアライン単位を4バイト境界から2バイト境界に修正

'11/07/19 
　・カーネル管理外の割込みをサポート

'11/07/12 
　・未登録のCPU例外ハンドラの入口処理 _default_exc_handler_entry
　　　CPU例外ハンドラ番号やCPU例外発生時のレジスタ内容を正しく表示
　　　できない不具合を修正（分岐先を誤っていた）

'11/06/27 
　・関数set_vbrの仮引数にconst修飾子を追加
　・SILのメモリ空間アクセス関数を呼び出す際、ポインタ引数のビット幅を
　　明示するように変更

'11/05/10 Release1.7.0
　・非依存部のRelease1.7.0に対応
　・offset.hを生成する方法を、コンフィギュレータを用いる方法に変更
　　　・makeoffset.cを削除
　　　・prc_offset.tfを追加
　・マクロINT_ENTRY、INTHDR_ENTRY
　　　割込みハンドラ番号を定数式で与えられるとビルドに失敗する不具合
　　　を修正
　・マクロEXC_ENTRY、EXCHDR_ENTRY
　　　CPU例外ハンドラ番号を定数式で与えられるとビルドに失敗する不具合
　　　を修正
　・prc_support.S
　　　・共通割込みの入口処理を示すラベル_int_entryを
　　　　_interrupt_entryに変更
　　　　（非依存部のINHINIB構造体のメンバ名int_entryと衝突するため）
　　　・対称性のため、共通CPU例外入口処理を示すラベル_exc_entryを
　　　　_exception_entryに変更
　・sh7211.h
　　　MTU2のレジスタ定義を追加

'11/01/18 
　・prc_support.S
　　　_ret_int_1でSH2A専用命令しか記述していない不具合を修正

'11/01/14 
　・タイマドライバをリファクタリング

'11/01/12 
　・レジスタのアドレスを定義したマクロ名にサイズを表すサフィックス
　　_b（1バイト）,_h（2バイト）,_w（4バイト）を追加

'11/01/07 
　・Makefile.sh2a
　　　kernel_cfg.timestampとshxxxx.tfの依存関係の定義を
　　　Makefile.targetからMakefile.sh2aに移動

'10/12/17 
　・sh7211.h
　　　CMT1のレジスタ定義を追加
　　　
'10/12/16 
　・Makefile.sh2a
　　　kernel_cfg.timestampとshx.tfの依存関係について追記

'10/12/15 
　・タスクのスタック領域の先頭番地のチェックを行っていない不具合を修正

'10/12/10 
　・タイマの起動処理（prc_cmt.c：target_timer_initialize）
　　　タイマスタートと割込みクリアの順序が逆になっている不具合を修正

'10/09/22 Release 1.6.0
　・バージョン番号を更新

'10/09/21
　・「タスクコンテキストに含まれるレジスタ」を修正

'10/09/17 
　・ドキュメントの構成を非依存部Release 1.6.0のポーティングガイドの
　　「9.1 ドキュメント」に準拠

'10/09/15 
　・prc_terminateをprc_exitにリネーム
　・trace_config.c内で定義されるシンボルのリネームを追加
　・.globl→.global

'10/09/09
　・非依存部のRelease1.6.0に対応
　　・タスク初期化コンテキストブロック（TSKINICTXB）の定義を追加し、
　　　各タスクのスタックポインタの初期値を静的に決定するようにした。

'10/07/05 
　・prc_timer.h/c/cfgをprc_cmt.h/c/cfgにリネーム
　　（チップにより、内蔵タイマの種類が異なるため）
　　これに伴い、prc_cmt.oの定義をMakefile.prcからMakefile.sh2aへ移動
　・「このインクルードファイルは，target_xxx.hのみからインクルード
　　　される．」という条件をプリプロセス時にチェックできるよう修正

'10/07/02 
　・pdic/sh/sh_scif.c
　　　　sh_scif_pol_putc()をリエントラントに修正
　・割込みを許可するldc命令の扱いを修正
　　　　以下のマクロを新設
　　　　　　・LDC_NOP_DISPATCHER
　　　　　　・LDC_NOP_SET_SR
　　　　　　・LDC_NOP_SIL_SET_IIPM

'10/07/01 
　・個別パッケージにpdic/shが含まれていない不具合を修正

'10/06/09 
　・インラインアセンブラのclobber変数リストにSRのTビットを追加
　　（ldc r, sr命令）
　　　該当箇所：
　　　　・set_sr(uint32_t sr)
　　　　・TOPPERS_disint(void)
　　　　・TOPPERS_set_iipm(uint32_t TOPPERS_iipm)

'10/06/08 
　・キャッシュの初期化ルーチンを追加（動作未確認）

'10/06/07 
　・シリアルドライバをHEWのI/Oシミュレーションに対応

'10/01/20 Release 1.4.2
　　バージョン番号を更新
　　（個別パッケージに含まれるAPSH2A(GCC)ターゲット依存部のみ更新）

'09/11/17 Release 1.4.1
　　バージョン番号を更新

'09/11/09 
　・_dispatcher_2
　　　マクロOMIT_POWER_CONTROLを定義した場合、不要なラベル_sleep_end_dis
　　　への参照が残っていた不具合を修正

'09/11/06 
　・割込みの出口処理におけるタスク例外処理の呼び出し時に
　　戻り番地が設定されていなかった不具合を修正

'09/10/26 
　・スタートアップルーチン
　　　・ステータスレジスタの初期化で、全割込みロックとすべきところを
　　　　CPUロック状態相当にしていた不具合を修正
　　　　（カーネル管理外の割込みを許可していた不具合を修正）

'09/10/22 
　・_call_exit_kernel
　　　全割込みロック状態で呼ばれるのに、さらに割込みを禁止する
　　　処理が冗長なので、これを削除

'09/09/30 
　・割込み／CPU例外の出口処理
　　　戻り先がvector_entryセクションか否かの判定で、境界値の扱いを修正
　・TCB_pc, TCB_enatex, TCB_enatex_bit, TCB_enatex_maskの
　  値の範囲チェックを追加

'09/09/29 
　・割込みの出口処理
　　　多重割込みの際、CPUロック状態のまま、割込みハンドラからリターン
　　　し、戻り先がvector_entryセクション（割込みの入口処理）の場合、
　　　カーネル側でCPUロック解除する処理が抜けていた問題を修正
　・CPU例外の出口処理
　　　・スタックフレームの整合性がとれていない問題を修正
　　　・スタックに積まれた戻り番地へのオフセットSP_PC_OFFSET_EXCの
　　　　値が正しくない問題を修正
　・movml/movmu命令の使用箇所
　　　・レジスタバンクの有無と関係ない箇所を、#ifdef USE_BANKED_REG
　　　　から#ifdef TOPPERS_SUPPORT_SH2A_INSTRUCTIONに修正
　　　・CPU例外の出口処理でもmovml命令を使用するよう修正

'09/07/15 
　・未登録のCPU例外の（CPU例外要因毎の）入口処理から呼ばれる
　　共通の処理_default_exc_handler_entryを追加
　・未登録の割込みの（割込み要因毎の）入口処理から共通の処理
　　_default_int_handler_entryが呼ばれていない不具合を修正
　・デフォルトの割込みハンドラdefault_int_handlerに引数が正しく
　　渡っていない不具合を修正
　　　・default_int_handlerのAPIを変更（引数を割込み番号に）
　　　    void default_int_handler(INTNO intno)
　・未登録の割込み／CPU例外の入口処理がvector_entryセクションに
　　入っていない不具合を修正。

'09/05/07 Release 1.4.0
　・非依存部Release 1.4.0に対応

'09/05/01 
　・レジスタバンク・オーバーフロー例外を許可

'09/04/23 
　・dis_int/ena_int/CFG_INTの制限事項を追記

'09/04/10 
　・ldc命令がスロット不当命令になるプロセッサのために
　　TOPPERS_LDC_IS_SLOT_ILLEGAL_INSTRUCTIONマクロを新設

'09/04/07 
　・USE_BANKED_REGマクロの説明を追記

'09/04/03 
　・テーブルint_iipm_tbl[]
　　　マジックナンバー0x80をNOT_CFG_INT_BITマクロと定義
　・INTNO_IRQをINTNO_IS_IRQにリネーム
　・i_begin_int()の制限事項を追加

'09/04/02 
　・割込み番号，割込みハンドラ番号，CPU例外ハンドラ番号および
　　IRQ割込みの割込み番号の最小値／最大値の定義
　　　・値取得シンボルテーブル経由で取得するよう変更
　　　　　（インクルードファイルとテンプレートファイルで同じ定義を
　　　　　　二重に持たない。）
　　　・これに伴い、EXCNO_RANGE、INTNO_RANGE、INHNO_RANGEの定義を
　　　　shxxxx.tfからprc.tfに移動
　・set_irc_ipr()
　　　shx_config.hからprc_config.hへ移動
　・i_begin_int()
　　　prc_config.hからshx_config.hへ移動
　・init_irc(), set_irc_ipr()
　　　それぞれirc_initialize(),irc_set_ipr()にリネーム
　・sh7211.h
　　　target_support.Sで使用するレジスタ定義を追加
　　　　・ピンファンクションコントローラ
　　　　・バスステートコントローラ（BSC）
　　　　・クロックパルス発振器（CPG）
　　　　・低消費電力モード関連
 
'09/03/30 
　・default_exc_handler
　　　CPU例外発生時のスタックポインタの値を表示するよう修正
　・log_exc_enter/log_exc_leave
　　　割込みを許可してから呼び出すよう修正
　　　log_exc_leaveを使用しなくても、引数を退避／復元していたのを削除

'09/03/27 
　・割込み属性の設定処理の見直し
　　・TA_BOTHEDGE、TA_LOWLEVELの処理を追加
　　・sh2a.tf(kernel.tfのSH2Aコア依存部)を新設
　　・ドキュメント整備
　　　　・デフォルトの処理を「(3-2) 割込み処理に関する規定」に記述
　・x_define_exc()にCPU例外番号のエラーチェックを追加
　・ユーザーズマニュアルから設計メモを分離
　・コピーライトを追加

'09/03/25 
　・Makefile.prcにprc_check.tf（パス３）の依存関係を追記
　・変数lock_flag、saved_iipmのvolatile修飾を削除

'09/03/24 
　・Makefile.prcからコア依存部を分離し、Makefile.sh2aを新設
　・パス２で生成する割込みの出入口処理を
　　　・C言語ソースkernel_cfg.cのインラインアセンブラ
　　から
　　　・通常のアセンブリ・ソースファイルkernel_cfg_asm.S
　　に変更。
　・USE_BANKED_REGの定義をsh7211_config.hからMakefile.sh2aに移動
　・使用できる命令セットの定義
　　　TOPPERS_SUPPORT_SHxx_CODEをTOPPERS_SUPPORT_SHxx_INSTRUCTIONに
　　　リネームし、定義場所をprc_support.Sからsh2a_config.h（コア依存
　　　部）に移動

'09/03/23 
　・チップ依存、コア依存の切り分けの見直し
　　　・割込み番号のマクロ定義箇所
　　　  　INTNO_IRQ0,INTNO_IRQ_MAXをTMIN_INTNO_IRQ,TMAX_INTNO_IRQに
　　　　　リネームし、sh2a_config.hからsh7211_config.hに移動
　　　・IRCの初期化
　　　　　init_irc()をチップ依存部とコア依存部に分離し、それぞれ
　　　　　sh7211_config.hとsh2a_config.hに配置
　　　・prc_config.h　割込み（ハンドラ）番号の内部・外部表現相互変換
　　　　　割込み番号、割込みハンドラ番号の最小値が64に固定されていた
　　　　　箇所をチップ依存部で定義した値を参照するよう修正

'08/05/19 
　・prc_initialize, prc_terminateのシンボルリネームを
　　アーキテクチャ依存部で行うよう変更

'08/05/13 Release1.3.1
　・非依存部への追従
　　・スタックサイズのエラーチェックに関する修正
　　　　CHECK_STKSZ_ALIGNの定義をprc.tfに追加

'08/05/12 Release1.3.0
　・シリアルドライバの見直し
　　　処理系依存（shc依存）を#ifdefで切り替えていたのを、
　　　target_syssvc.h経由でインクルード方法に変更し、
　　　任意の処理系に対応できるよう修正

'08/03/13 Release1.1.2
　・HEW版と同期

　・prc.tf
　　　「異なる割込み要求ラインに対して，同一の割込み優先度しか
　　　設定できないケース」のエラーチェックでエラー種別（E_PAR）を
　　　表示していない不具合を修正
　・sh7211_config.h
　　　x_config_intatr
　　　　ICR1レジスタに32ビットアクセスしていた不具合を16ビット
　　　　アクセスに修正
　・prc_support.S
　　・SH2A用命令の積極的利用
　　・ログトレース関数log_inh_leave、log_exc_leaveを呼び出さない場合も
　　　スタックエリアに無駄なアクセスが発生していた点を修正
　　・遅延スロットの見直し。
　・デフォルトのCPU例外ハンドラ
　　・例外要因を表示するよう修正
　　・r0〜r7の値を表示するよう修正
　・sh2a_config.hを新設
　　　sh2aファミリで共通の定義をsh7211_cnfig.hからこちらに移動
　・なるべく32ビットデータとして処理するよう、全体を見直し。
　　　→プログラムサイズを80バイト改善
　　　・saved_iipmを32ビットに

　・シリアルドライバ
　　・sh_scif_init_siopinib
　　　シリアルステータスレジスタSCFSRを4バイトアクセスしていた
　　　不具合を修正
　　・void sh_scif_init(uint8_t portno)
　　 　→void sh_scif_init(ID portid)
　　　　　不要な命令を少なくするため
　　・スコープの見直し
　　　　・配列siopinib_tableをstatic変数に変更
　　　　・配列siopcb_tableをstatic変数に変更
　　　　・関数sh_scif_init_siopinibをstatic関数に変更


'08/02/05 Release1.1.1
　シリアルドライバ
　　　（バナー表示からシステムログに切り替わる際）
　　二重に初期化される不具合を修正
　　ポート番号毎に個別に割込み禁止／許可するように修正
　CFG_INTのエラーチェックを追加
　　　同じ割込み優先度になるべき割込み番号のチェック
　prc_support.S
　  ・bt/s命令の遅延スロットにスロット不当命令が入っていた不具合を修正
　  ・コメントの修正
　sh7211.h
　　・sil.hをインクルードする必要はないので、削除
