	    ＝ TOPPERS/JSPカーネル ユーザズマニュアル ＝
                 （s1c33 ターゲット依存部）

            （Release 1.4.1対応，最終更新: 04-Jan-2005）

------------------------------------------------------------------------
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2004 by SEIKO EPSON Corp, JAPAN

 上記著作権者は，Free Software Foundation によって公表されている
 GNU General Public License の Version 2 に記述されている条件か，以
 下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェア（本ソフトウェ
 アを改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
 利用と呼ぶ）することを無償で許諾する．
 (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
     権表示，この利用条件および下記の無保証規定が，そのままの形でソー
     スコード中に含まれていること．
 (2) 本ソフトウェアを再利用可能なバイナリコード（リロケータブルオブ
     ジェクトファイルやライブラリなど）の形で利用する場合には，利用
     に伴うドキュメント（利用者マニュアルなど）に，上記の著作権表示，
     この利用条件および下記の無保証規定を掲載すること．
 (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
     み込んだ形で利用する場合には，次のいずれかの条件を満たすこと．
   (a) 利用に伴うドキュメント（利用者マニュアルなど）に，上記の著作
       権表示，この利用条件および下記の無保証規定を掲載すること．
   (b) 利用の形態を，別に定める方法によって，上記著作権者に報告する
       こと．
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     害からも，上記著作権者を免責すること．

 本ソフトウェアは，無保証で提供されているものである．上記著作権者は，
 本ソフトウェアに関して，その適用可能性も含めて，いかなる保証も行わ
 ない．また，本ソフトウェアの利用により直接的または間接的に生じたい
 かなる損害に関しても，その責任を負わない．

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


１．S1C33 ターゲット依存部の概要

1.1 ターゲットシステムと開発環境

S1C33プロセッサのターゲットシステムとしては，S1C33209, S1C33L11, S1C33
401を搭載した以下のボードをサポートしている．

・セイコーエプソン株式会社 DMT33209 ボード （CPU:S1C33209）
・セイコーエプソン株式会社 LUXUN2   ボード （CPU:S1C33L11）
・セイコーエプソン株式会社 DMT33401 ボード （CPU:S1C33401）
・セイコーエプソン株式会社 LUXUN4   ボード （CPU:S1C33401）

開発環境はセイコーエプソン株式会社の開発環境S5U1C33001C（GNU33）を用いる．
これはGNU開発環境をS1C33用に移植したものであり，オブジェクトファイル
フォーマットは ELF を標準とする．

    ディレクトリ名
    s1c33                   GNU開発環境用（現時点で未サポート）
        dmt33209                DMT33209 （セイコーエプソン）
        luxun2                  LUXUN2   （セイコーエプソン）
        dmt33401                DMT33401 （セイコーエプソン）
        luxun4                  LUXUN4   （セイコーエプソン）

    s1c33-gnu33             GNU33開発環境用
        dmt33209                DMT33209 （セイコーエプソン）
        luxun2                  LUXUN2   （セイコーエプソン）
        dmt33401                DMT33401 （セイコーエプソン）
        luxun4                  LUXUN4   （セイコーエプソン）

1.2 サポートする機能の概要

S1C33依存の機能として，割込みの禁止と許可（dis_int，ena_int）及び，割込み
マスクの変更・参照（chg_ilv，get_ilv）をサポートしている．
性能評価用システム時刻参照機能（vxget_tim）はサポートしていない．

1.3 他のターゲットへのポーティング

S1C33プロセッサは，S1C33209を始めとするスタンダードマクロプロセッサと，
S1C33401を始めとするアドバンストマクロプロセッサとに大別されるが，各
系統における上位互換プロセッサであれば，そのまま動作する．
ただし下位プロセッサにない追加機能を使用する場合，適宜IOレジスタアド
レス等をターゲットに合わせて変更する必要がある．

1.4 シリアルポート

チャネル0(LUXUN4はチャネル2)を使用したシリアル通信をサポートしている．
DMT33MONボードを別途用意することにより，RS232-Cケーブルでの接続が可能
となる．
通信条件は以下のとおりである．
  通信方式       : 調歩同期 8ビット
  通信速度       : 115,200bps
  パリティ       : なし
  ストップビット : 1ビット


２．S1C33プロセッサ依存部の機能

この節では，カーネルおよびシステムサービスの機能の中で，S1C33依存の部分
について解説する．

2.1 データ型

int型および unsigned int型のサイズは 32ビットである．また，割り込みレ
ベルを表すデータ型 ILEVNO はunsigned int型で定義されている.

2.2 割込み管理機能と割込みハンドラ

CPUロック状態や初期化ルーチン内では，TPS_CPULOCK_LEVとして定義された割
り込みレベル未満のマスク可能な割込みはすべて禁止されている．具体的には，
PSR（Processor Status Register）レジスタのIL（Interrupt Level）フィー
ルドに0x5が設定される．カーネルによって管理される割り込みは，割り込み
レベルをTPS_CPULOCK_LEV未満としなければならない．（設定可能な割り込み
レベルの上限はTPS_INTLEV_MAXとして定義されている）
TPS_CPULOCK_LEV，TPS_INTLEV_MAXはcpu_config.hにて定義されており，必要
であれば変更することができる．

S1C33プロセッサは0〜7までの割り込みレベルを設定することができる．
レベル5（デフォルト）の割り込みおよびNMIでは，サービスコールの使用を
禁止する．

DEF_INH で指定する割込みハンドラ番号（inhno）は，マスク可能な割り込み
として定められたベクタ番号である16番以降を指定する．
ベクタ番号として有効でない番号を指定された場合の動作は未定義である．
有効なベクタ番号については，各CPUのマニュアルを参照されたい．

S1C33プロセッサ依存部では多重割り込みをサポートしている．そのため，割
り込み発生時に処理される割り込みハンドラ入り口処理では，IEビットに1を
設定し，割り込みネストカウンタをインクリメントしている．割り込み処理内
で他の割り込みを禁止するには，iloc_cpu を呼び出すなど，明示的に割り込
みを禁止する必要がある．

ILは割り込み発生時にあらかじめ設定された割り込みレベルに変更される．
使用する割り込みのレベルをすべて同一にすれば，多重割り込みは発生しない．

S1C33プロセッサ依存部では，機種依存サービスコールとして特定の割り込み
を禁止／許可するサービスコールdis_int, ena_int, 割り込みレベルを変更／
取得するサービスコールchg_ilv, get_ilvをサポートしている．dis_int,
ena_intはコンテキスト状態に依存しない．タスクコンテキスト，非タスク
コンテキストのどちらでも呼び出すことができる．chg_ilv, get_ilvはコン
テキスト状態に依存し，非タスクコンテキストまたはCPUロック状態では使用
できない．

S1C33依存の割り込みレベルの変更／参照，および割り込み禁止／許可のための
サービスコールの仕様は以下の通り．

(1) chg_ilv                     割り込みレベルの変更

【C言語API】
        ER ercd = chg_ilv(ILEVNO ilevno);

【パラメータ】
        ILEVNO     ilevno       設定すべき IL の値

【リターンパラメータ】
        ER      ercd            エラーコード

【エラーコード】
        E_CTX                   コンテキストエラー
        E_PAR                   パラメータエラー（ilevno が不正）

【機能】

IL（Interrupt Level）を ilevno で指定された値に設定する．指定した値が
TPS_INTLEV_MAXとして定義された割り込みレベルを超えている場合，E_PAR
エラーとなる．IL を 0〜TPS_INTLEV_MAXに設定した場合でも，ディスパッチ
は禁止されない．

このサービスコールは，タスクコンテキストで CPUロック解除状態の時のみ呼
び出すことができる．非タスクコンテキストや CPUロック状態で呼び出した場
合には，E_CTXエラーとなる．

chg_ilvにより変更したレベルは原則としてディスパッチ後も継承されるが，
保障はされない．例えば割り込みハンドラによりディスパッチされたタスクで
割り込みレベルを変更した場合，割り込み発生直前に実行されていたタスクへ
復帰すると割り込みレベルも元に戻る．

(2) get_ilv                   割り込みレベルの参照

【C言語API】
        ER ercd = get_ilv(ILEVNO *p_ilevno);

【パラメータ】
        なし

【リターンパラメータ】
        ER      ercd          エラーコード
        ILEVNO  *p_ilevno     現在の IL の値

【エラーコード】
        E_CTX                 コンテキストエラー
        E_PAR                 パラメータエラー（p_ilevnoがNULL）

【機能】

現在の IL（Interrupt Level）の値を読み出し，*p_ilevno に返す．

このサービスコールは，タスクコンテキストで CPUロック解除状態の時のみ呼
び出すことができる．非タスクコンテキストや CPUロック状態で呼び出した場
合には，E_CTXエラーとなる．

(3) dis_int                   割り込みの禁止

【C言語API】
        ER ercd = dis_int(INTNO intno);

【パラメータ】
        INTNO     intno       禁止する割り込みのベクタ番号

【リターンパラメータ】
        ER      ercd          エラーコード

【エラーコード】
        E_PAR                 パラメータエラー（intno が不正）

【機能】

指定されたベクタ番号に対応する割り込みを禁止する．

このサービスコールはコンテキスト状態などには依存せず，いつでも呼び出す
ことができる．


(4) ena_int                   割り込みの許可

【C言語API】
        ER ercd = ena_int(INTNO intno);

【パラメータ】
        INTNO     intno       許可する割り込みのベクタ番号

【リターンパラメータ】
        ER      ercd          エラーコード

【エラーコード】
        E_PAR                 パラメータエラー（intno が不正）

【機能】

指定された割り込みベクタ番号に対応する割り込みを許可する．

このサービスコールはコンテキスト状態などには依存せず，いつでも呼び出す
ことができる．

2.3 CPU例外管理機能とCPU例外ハンドラ

DEF_EXC で指定する例外ハンドラ番号（excno）は，0〜15までの例外ベクタ番
号を指定する．CPU例外ハンドラとして有効でない番号を指定された場合の動
作は未定義である．

2.4 割り込み／CPU例外ハンドラの実装

割り込み／CPU例外ハンドラ（以下ハンドラ）は，以下の要領で実装する．

(1) 静的APIによる生成

DEF_INHを用いハンドラ出入り口処理を生成する．CPU例外ハンドラの場合は，
DEF_EXCを用いる．
出入り口処理は指定したハンドラ+_entryという名称で生成される．下記の
例では，timer_handler_entry となる．

例: タイマハンドラ timer_handler の登録
    DEF_INH(INTHDR1, { TA_HLNG, timer_handler });

(2) ベクタテーブル登録

ベクタテーブルに(1)で登録したハンドラ出入り口処理を記述する．

const void *VectorTable[] = {
                   :
            INT_ENTRY(timer_handler),
                   :
}

INT_ENTRY は，パラメータとして指定された文字列に_entryを付加する
マクロである．CPU例外ハンドラの場合は，EXC_ENTRY を用いる．

ベクタテーブルをプログラムで書き換え可能なセクション（.dataなど）に
配置する場合，マクロdefine_inh を用いて動的にベクタテーブルを更新
することが可能である．この場合静的な記述は必須ではないが，例外として，
ベクタテーブル0番に登録するリセットベクタについては，あらかじめ登録
しておくべきである．define_inh によるハンドラの登録はプログラムが
動作してから書き換えが行われるため，実行前にリセットを行うとプログ
ラムの実行開始番地が特定できなくなる可能性があるためである．

ユーザの作成したハンドラは出入り口処理から呼び出される形となる
ため（下図参照），ローカル変数を用いることが可能である．

本実装では割り込みハンドラについてのみサポートしている．割り込みサービス
ルーチンについてはサポートしていない．

                       割り込みハンドラ     割り込みハンドラ
                       出入り口処理

    外部割込み発生 --->
                       | 1.レジスタの退避
                       | 2.スタック切り替え
                       | 3.割り込みネスト
                       |   カウント更新（+1）
                       | 4.IEビット設定（ON）
                       |
                       +------------------->
                                            | 5.割り込み要因のクリア
                                            | 6.割り込み処理
                                            |
                        <-------------------+
                       |
                       | 7.CPUをロック
                       | 8.割り込みネスト
                       |   カウント更新（-1）
                       | 9.スタック切り替え
    ディスパッチ   <---+
    or リターン

    レジスタの復元は
    ここで行われる．

割り込みハンドラにおいて以下の条件をすべて満足する場合，割り込みハン
ドラのプロトタイプ宣言で__attribute__ ((interrupt_handler))を指定する
ことでマクロによる出入り口処理の追加は不要になる．

  出入り口処理を省略できる条件
    1. スタック領域を使用しない
    2. サービスコールを使用しない
    3. 多重割り込みを許可しない

プログラムによる書き換えが不可能なセクション（.rodataなど）にベクタテーブル
を配置した状態でdefind_inh を使用した場合，ベクタテーブルの書き換えは行
われない．また，それをエラーとして検出することもしない．

2.5 スタートアップルーチン

S1C33依存のスタートアップモジュール（sys_start.c）では次の初期化処理を行う．

(1) デフォルトデータエリアポインタの設定

最初に，デフォルトデータエリアポインタのアドレスを設定する．
これは，GNU33でビルドされたプログラムはグローバルシンボルのアドレスを
特定するためにデータエリアポインタアドレスからのオフセットでアドレスを
特定しているためである．
そのため，最初にリンカスクリプトで指定したアドレス（__dp）をデータエリア
ポインタ（r15 or dpレジスタ）に設定している．

(2) スタックポインタの初期化，PSRレジスタの初期化

スタックポインタに STACKTOP を設定する．ここで割込みスタックポインタに
設定されたスタック領域は，カーネル起動後は非タスクコンテキスト用のスタ
ック領域として使われる．STACKTOP は，sys_config.h 部で定義することを想
定している．
PSRレジスタを初期化する．具体的には0x00000000が設定される．

(3) hardware_init_hook の呼出し

hardware_init_hook が 0 でない場合には，hardware_init_hook を呼び出す．
hardware_init_hook は，カーネルが起動される前に行う必要があるターゲッ
ト依存の初期化を行うために用意している．hardware_init_hook がどこにも
定義されていない場合，リンカでこのシンボルを 0 に定義する．
S1C33用ソースではsys_start.cに関数を用意しており，TTRBの設定，または
IOレジスタの設定を行っている．

(4) RAM領域の初期化

ROM領域に格納されている.dataセクションの初期値をRAM上の当該領域へコピー
する．また，.bssセクションを0クリアする．.dataセクションの初期化はプロ
グラムのマッピングに応じて行う．

(5) software_init_hook の呼出し

software_init_hook が 0 でない場合には，software_init_hook を呼び出す．
software_init_hook は，カーネルが起動される前に行う必要があるソフトウェ
ア環境（具体的には，ライブラリ）依存の初期化を行うために用意している．
software_init_hook がどこでも定義されていない場合，リンカでこのシンボ
ルを 0 に定義する．
S1C33用ソースではsys_start.cに関数を用意しており，ライブラリの初期化関数
を呼び出している．

(6) カーネルの起動

kernel_start へ分岐し，カーネルを起動する．分岐後に復帰してくることは
ないが，sys_start.cでは分岐処理後にhalt命令の無限ループを用意してある．

2.6 アイドル処理

実行できるタスクがない場合に処理されるアイドル処理を実装している．この
処理では，割り込み許可状態にした後，halt 命令を無限ループ内で処理して
いる．

2.7 プロセッサ動作モード

S1C33プロセッサ依存部は，常時スーパバイザモードで動作する．（S1C33401
のみ．これ以外のプロセッサでは通常稼動時に動作モードの概念がない）
ユーザプログラムにおいてユーザモードに移行すると，カーネルの動作に支障
をきたすため，これを禁止する．

３．システム依存部の機能

3.1 システムクロックドライバ

システムクロックドライバは，1ms周期でハードウェアタイマ割り込みを発生
させるように設定されている．sys_defs.h 中で定義されている TIC_NUME と
TIC_DENO を変更することで，isig_tim 呼び出し時に更新するシステム時間の
単位を任意に変更することができる．デフォルトでは1回のハードウェアタイマ
割り込みでシステム時間を 1 進める設定になっている．
仮にTIC_DENOを 2 とすると，2回の割り込みでシステム時間を 1 進めること
になる．

3.2 シリアルインタフェースドライバ

シリアルインタフェースドライバでは，チャネル0（LUXUN4はチャネル2）を
使用したシリアル通信を行えるように設定されている．
通信条件は以下の通りである．
  通信方式       : 調歩同期 8ビット
  通信速度       : 115,200bps
  パリティ       : なし
  ストップビット : 1ビット


４．開発環境の構築

開発環境の構築方法については，GNU開発環境構築マニュアルを参照のこと．

4.1 開発環境のバージョン
動作確認したツールのバージョンは以下の通りである．

    GNU33 v1.5
    Cygwin （cygwin DLL 1.5.9-1）

4.2 サンプルプログラム構築方法

DMT33209ボード用のサンプルプログラムを4.1項に示す環境で構築する場合を
例としてS1C33固有の注意点を説明する．
カレントディレクトリがjsp/であるものとして説明する．

(1) 開発環境の構築

GNU33を展開する．S1C33機種依存部では，c:\gnu33（/cygdrive/c/gnu33）に展
開されることを想定している．これ以外のディレクトリに展開された場合は，
config/s1c33-gnu33/Makefile.configの修正が必要である．
config/s1c33-gnu33/Makefile.configにおいて開発環境のパスはTOPDIRとして
定義されており，これを修正する．
サンプルプログラム構築に使用するmakeはGNU33に含まれるMake，GNU Makeの
どちらでも使用可能である．

  展開先を/usr/local/gnu33とした場合

  TOPDIR = /usr/local/gnu33

GNU33にはcygwin1.dllが同梱されているため，Cygwin環境でcygwin1.dllが複数
存在することによりエラーが発生する場合は，GNU33のcygwin1.dllをCygwinの
cygwin1.dllで置き換え，同一のバージョンにする．（共に最新版とするのが
望ましい）

(2) コンフィギュレータのコンパイル

TOPPERSの展開直後等でコンフィギュレータを作成していない場合は作成する．
作成方法についてはuser.txtを参照されたい．

(3) コンフィギュレーションスクリプトによるMakefile，サンプルプログラムの
    生成

コンフィギュレーションスクリプトにより，Makefile，サンプルプログラムの生
成を行う．このとき，開発環境名にgnu33を指定する．

  % mkdir dmt33209
  % cd dmt33209
  % ../configure -C s1c33 -S dmt33209 -T gnu33

GNU33により生成されるオブジェクトファイルはELF形式となるが，Cygwin環境
ではターゲットオブジェクトのファイル名に拡張子exeが付加される．
拡張子を変えたい場合はOBJEXTの定義を変更する．

  拡張子をelfとしたい場合

  OBJEXT = elf

(4) コンパイル

コンパイルを行う．これは標準的な手順と同様である．

  % make depend
  % make


５．その他

5.1 ディレクトリ・ファイル構成

config/s1c33/
    Makefile.config      Makefileの S1C33 依存定義（GNU開発環境用）
    cpu_config.c         プロセッサ依存部の関数
    lib.c                ANSI Cライブラリ初期化関数ソースファイル
    makeoffset.c         offset.h 生成サポートプログラム
    sys.c                低レベル入出力関数ソースファイル
    cpu_config.h         プロセッサ依存部の構成定義
    cpu_context.h        コンテキスト操作
    cpu_defs.h           プロセッサ依存部のアプリケーション用定義
    cpu_insn.h           低レベルのプロセッサ操作ルーチン
    cpu_rename.h         カーネルの内部識別名のリネーム
    cpu_unrename.h       カーネルの内部識別名のリネーム解除
    s1c33.h              S1C33 CPUに関する定義
    tool_config.h        開発環境依存部の構成定義
    tool_defs.h          開発環境依存部のアプリケーション用定義
    cpu_rename.def       カーネルの内部識別名のリネーム定義
    cpu_unrename.def     カーネルの内部識別名のリネーム解除

config/s1c33/dmt33209
    hw_serial.cfg        SIOドライバのコンフィギュレーションファイル
    Makefile.config      Makefileの DMT33209 依存定義（GNU開発環境用）
    hw_serial.c          シリアルインターフェイスに関する変数と関数
    sys_config.c         システム依存部の関数
    sys_start.c          ブートプログラム ソースファイル
    dmt33209.h           DMT33209ボードに関する定義
    hw_serial.h          シリアルインターフェイス操作ルーチン
    hw_timer.h           タイマ操作ルーチン
    sys_config.h         システム依存部の構成定義
    sys_defs.h           システム依存部のアプリケーション用定義
    sys_rename.h         カーネルの内部識別名のリネーム
    sys_unrename.h       カーネルの内部識別名のリネーム解除
    sys_rename.def       カーネルの内部識別名のリネーム定義
    sys_unrename.def     カーネルの内部識別名のリネーム解除
    dmt33209.ld          サンプルプログラム用リンカスクリプトファイル

config/s1c33/luxun2
    hw_serial.cfg        SIOドライバのコンフィギュレーションファイル
    Makefile.config      Makefileの LUXUN2 依存定義
    hw_serial.c          シリアルインターフェイスに関する変数と関数
    sys_config.c         システム依存部の関数
    sys_start.c          ブートプログラム ソースファイル
    hw_serial.h          シリアルインターフェイス操作ルーチン
    hw_timer.h           タイマ操作ルーチン
    luxun2.h             LUXUN2ボードに関する定義
    sys_config.h         システム依存部の構成定義
    sys_defs.h           システム依存部のアプリケーション用定義
    sys_rename.h         カーネルの内部識別名のリネーム
    sys_unrename.h       カーネルの内部識別名のリネーム解除
    sys_rename.def       カーネルの内部識別名のリネーム定義
    sys_unrename.def     カーネルの内部識別名のリネーム解除
    luxun2.ld            サンプルプログラム用リンカスクリプトファイル

config/s1c33/dmt33401
    hw_serial.cfg        SIOドライバのコンフィギュレーションファイル
    Makefile.config      Makefileの DMT33401 依存定義
    hw_serial.c          シリアルインターフェイスに関する変数と関数
    sys_config.c         システム依存部の関数
    sys_start.c          ブートプログラム ソースファイル
    hw_serial.h          シリアルインターフェイス操作ルーチン
    hw_timer.h           タイマ操作ルーチン
    dmt33401.h           DMT33401ボードに関する定義
    sys_config.h         システム依存部の構成定義
    sys_defs.h           システム依存部のアプリケーション用定義
    sys_rename.h         カーネルの内部識別名のリネーム
    sys_unrename.h       カーネルの内部識別名のリネーム解除
    sys_rename.def       カーネルの内部識別名のリネーム定義
    sys_unrename.def     カーネルの内部識別名のリネーム解除
    dmt33401.ld            サンプルプログラム用リンカスクリプトファイル

config/s1c33/luxun4
    hw_serial.cfg        SIOドライバのコンフィギュレーションファイル
    Makefile.config      Makefileの LUXUN4 依存定義
    hw_serial.c          シリアルインターフェイスに関する変数と関数
    sys_config.c         システム依存部の関数
    sys_start.c          ブートプログラム ソースファイル
    hw_serial.h          シリアルインターフェイス操作ルーチン
    hw_timer.h           タイマ操作ルーチン
    luxun4.h             LUXUN4ボードに関する定義
    sys_config.h         システム依存部の構成定義
    sys_defs.h           システム依存部のアプリケーション用定義
    sys_rename.h         カーネルの内部識別名のリネーム
    sys_unrename.h       カーネルの内部識別名のリネーム解除
    sys_rename.def       カーネルの内部識別名のリネーム定義
    sys_unrename.def     カーネルの内部識別名のリネーム解除
    luxun4.ld            サンプルプログラム用リンカスクリプトファイル

config/s1c33-gnu33
    Makefile.config      Makefileの S1C33 依存定義（GNU33開発環境用）

config/s1c33-gnu33/dmt33209
    Makefile.config      Makefileの DMT33209 依存定義（GNU33開発環境用）

config/s1c33-gnu33/luxun2
    Makefile.config      Makefileの LUXUN2 依存定義（GNU33開発環境用）

config/s1c33-gnu33/dmt33401
    Makefile.config      Makefileの DMT33401 依存定義（GNU33開発環境用）

config/s1c33-gnu33/luxun4
    Makefile.config      Makefileの LUXUN4 依存定義（GNU33開発環境用）

5.2 メモリマップ

DMT33209ボード
    アドレス
    0x00000000 - 0x00001fff : CPU内蔵SRAM
                              非タスクコンテキスト用スタック領域
    0x00040000 - 0x00004fff : 内蔵I/O レジスタ領域

    0x00200000 - 0x002fffff : フラッシュメモリ
                              未使用
    0x00600000 - 0x006fffff : 外部SRAM
                              .bss, .dataセクション用領域
                              非タスクコンテキスト用スタック以外のRAM
                              領域はすべてここに配置される．
    0x00c00000 - 0x00cfffff : フラッシュメモリ
                              .text, .rodataセクション，.dataセクション
                              初期値格納領域
                              0x00c00000はS1C33デフォルトのブートアドレス

LUXUN2ボード
    アドレス
    0x00000000 - 0x00003fff : CPU内蔵SRAM
                              非タスクコンテキスト用スタック領域
    0x00040000 - 0x00004fff : 内蔵I/O レジスタ領域

    0x00400000 - 0x005fffff : 外部SRAM（Virtual SRAM）
                              未使用
    0x00800000 - 0x00ffffff : フラッシュメモリ
                              .text, .rodataセクション，.dataセクション
                              初期値格納領域
                              0x00c00000番地以降に上記セクションを配置
    0x02000000 - 0x027fffff : 外部SRAM（Virtual SRAM）
                              .bss, .dataセクション用領域
                              非タスクコンテキスト用スタック以外のRAM
                              領域はすべてここに配置される．

DMT33401ボード
    0x00000000 - 0x00007fff : CPU内蔵SRAM
                              非タスクコンテキスト用スタック領域
    0x00040000 - 0x00004fff : 内蔵I/O レジスタ領域

    0x00200000 - 0x002fffff : フラッシュメモリ
                              未使用
    0x00600000 - 0x006fffff : 外部SRAM
                              .bss, .dataセクション用領域
                              非タスクコンテキスト用スタック以外のRAM
                              領域はすべてここに配置される．
    0x10000000 - 0x11ffffff : 外部SDRAM
                              未使用
    0x20000000 - 0x200fffff : フラッシュメモリ
                              .text, .rodataセクション，.dataセクション
                              初期値格納領域

LUXUN4ボード
    0x00000000 - 0x00007fff : CPU内蔵SRAM
                              非タスクコンテキスト用スタック領域
    0x00040000 - 0x00004fff : 内蔵I/O レジスタ領域

    0x01000000 - 0x011fffff : 外部SRAM（Combo memory）
                              .bss, .dataセクション用領域
                              非タスクコンテキスト用スタック以外のRAM
                              領域はすべてここに配置される．
    0x10000000 - 0x11ffffff : 外部SDRAM
                              未使用
    0x20000000 - 0x207fffff : フラッシュメモリ（Combo memory）
                              .text, .rodataセクション，.dataセクション
                              初期値格納領域
