------------------------------------------------------------------------------
  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                      
    MIPS4(gcc)用 ドキュメント                                                 
                                                                              
                                       Copyright (C) 1998-2008 by Project HOS 
                                       http://sourceforge.jp/projects/hos/    
------------------------------------------------------------------------------

1. 概要

  本ドキュメントは Hyper Operating System V4（以下 HOS-V4）のMIPSコア
  の固有部分についての説明を記載します。
  特に、シマフジ電機 SEMB1200A 用にチューニングを行っていますので、
  他の製品で適用する場合は、一部機能が使えない場合があります。

2. 動作環境とその構築

2.1 CPUボード

動作確認がされているCPUボードは、以下のものです。

- シマフジ電機 SEMB1200A
  (http://www.shimafuji.co.jp/semb1200a/index.html)

2.2 開発環境

cygwin上で動作するgccクロスコンパイラで動作確認しています。詳しくは、
sugi3様のページ(http://home.r07.itscom.net/robin/)を参考にしてください。
クロスコンパイラのバイナリでの配布も行ってらっしゃるので、持ってきて展
開すればそのままできます。

その他、MinGW+MSYS環境でも環境を設定することで動作することを確認して
います（適宜makefileは変更してください）。

また、サンプルプログラムをコンパイルするには、下記で公開している
SEMB1200A用ライブラリが必要です。
(http://hw001.gate01.com/n-okada/robo-semb1200a.htm)

HOSライブラリ自体のコンパイルには、SEMB1200A用ライブラリは不要です。

2.3 HOSのコンパイル

2.3.1 HOS-v4共通 (hos4cfg.txt参照)
- まず hos4cfg.exe の生成が必要ですので、hos-v4/config に移動します。

- make -f gcc.mak を実行します。　その際、gcc, g++ が必要です。

- 今後、オリジナルな環境で開発を行うことを想定して、上記makeで生成した
　hos4cfg(.exe) を /usr/local/bin などにコピーしておくと便利です。

2.3.2 MIPS固有部
- hos-v4/lib/mips/mipsgcc/に移動します。

- h4mipsgcc.mkをコンパイラにあわせて変更します。
　ツール群が mipsel-semb-elf で /usr/local/mipsel-semb-elf/ に
　インストールされている場合を h4mipsgcc.mk としています。
　　（変更ポイント）
　　　ツール　　　　39-42行
　　　オプション　　45-46行
　　　インストール　663行

- make -f h4mipsgcc.mkとしてmakeします。

- libh4mips.aが生成されます。

- make -f h4mipsgcc.mk install を実行します。

2.4 サンプルプログラムのコンパイル

SEMB1200Aで動くものになっています。正しく動作すると、シリアルコンソー
ルに時刻と起動タスク名を一定時間おきに表示しつづけます。
２つのタスクのうち、TASK 2の後に、TC#0 例外処理により 5秒置きに増加する
数値と、sin()関数の１万倍した値を表示していれば、正常に動作できています。

- hos-v4/sample/mipsgcc/に移動します。

- Makefileを開発環境にあわせて変更します。

- makeします。

- 生成されたsample.binをWindows付属のハイパーターミナルでSEMB1200Aにダ
  ウンロードし、実行します。詳しくは、SEMB1200Aのマニュアルを参照して
  ください。

2.5 コンフィギュレーションファイルの設定上注意（機種依存）
　document/hos4cfg.txt 以外の注意事項を章番号と共に記します。
　(4.1) アイドル時のスタックの指定 API:HOS_IDL_STK と
　(4.2) 割込み時のスタック指定 API:HOS_INT_STK におきまして、
　スタックサイズが最大で 7バイト小さく見える場合があります。

　これは、MIPS の仕様としてメモリ上の 64bit データを扱う場合、
　メモリアドレスの下位３ビットが０でない場合、アドレス例外と
　なってしまうことを回避するため、include/mips/hospac.h にて、
　関数hospac_cre_ctx() を指定する際、下位３ビットのまるめを
　実施しています。

　これは、mipsel-semb-elf 環境のように、void* が 32bit で、
　double型など64ビットのFPUレジスタを使う場合、gcc が 64bit 
　命令にて、レジスタの退避や復帰命令を記述してしまうため、
　上記２つのAPIでスタックポインタの下位３ビットが０でないと
　アドレス例外を作りこんでしまうことになります。


3. メモリマップ(0x80000000-0x8007FFFF)

                                              ベクタ番号
     0x80000000 +-------------------------------+
                |   SEMB1200A システム領域      |
     0x80000800 +-------------------------------+
                |   HOS システム領域            |
     0x80002000 +-------------------------------+
                |   ユーザ領域                  |
                |                               |
                |   スタック領域                |
     0x8007FFFF +-------------------------------+

4 例外処理（割込みを含む）について

4.1 割込みベクタ番号一覧

     割込み定義番号  要因            内容
     ----------------------------------------------------------------------
            0       --              デフォールトハンドラ
            1       --              NMI・ソフトリセット例外
            2       --              TLB 不一致例外
            3       --              XTLB 不一致例外
            4       --              キャッシュエラー例外
            5       ExcCode 0       (予約)
            6       ExcCode 1       TLB 変更例外
            7       ExcCode 2       TLB 不一致(ロード)例外
            8       ExcCode 3       TLB 不一致(ストア)例外
            9       ExcCode 4       アドレスエラー(ロード)例外
            10      ExcCode 5       アドレスエラー(ストア)例外
            11      ExcCode 6       (予約)
            12      ExcCode 7       (予約)
            13      ExcCode 8       システムコール例外
            14      ExcCode 9       ブレークポイント例外
            15      ExcCode 10      予約命令例外
            16      ExcCode 11      コプロセッサ使用不可例外
            17      ExcCode 12      演算オーバーフロー例外
            18      ExcCode 13      トラップ例外
            19      ExcCode 14      (予約)
            20      ExcCode 15      浮動小数点例外
            21      ExcCode 16      (予約)
            22      ExcCode 17      (予約)
            23      ExcCode 18      (予約)
            24      ExcCode 19      (予約)
            25      ExcCode 20      (予約)
            26      ExcCode 21      (予約)
            27      ExcCode 22      (予約)
            28      ExcCode 23      ウォッチポイント
            29      ExcCode 24      (予約)
            30      ExcCode 25      (予約)
            31      ExcCode 26      (予約)
            32      ExcCode 27      (予約)
            33      ExcCode 28      (予約)
            34      ExcCode 29      (予約)
            35      ExcCode 30      (予約)
            36      ExcCode 31      (予約)
            37      IP7             CP0 割込み（HOS内部専用）
            38      IP6             (予約)
            39      IP5             (予約)
            40      IP4             (予約)
            41      IP3             (予約)
            42      IP2             外部割込み
            43      IP1             ソフトウェア割込み１
            44      IP0             ソフトウェア割込み０
            45      SYSCALL         (予約)
            46      -               (予約)
            47      -               (予約)
            48      -               (予約)
            49      -               (予約)
            50      -               (予約)
            51      -               (予約)
            52      -               (予約)
            53      -               (予約)
            54      -               (予約)
            55      -               (予約)
            56      -               (予約)
            57      -               (予約)
            58      -               (予約)
            59      -               (予約)
            60      -               (予約)
            61      -               (予約)
            62      -               (予約)
            63      -               (予約)

4.2 CPU および CPU搭載ボード依存の割込み例外処理
　sample/irq_sample.c に示しますように、4.1 で定義した例外処理に
　対応した形で CPUおよびCPU搭載ボードに依存した処理を記載してください。

------------------------------------------------------------------------------
 Copyright (C) 1998-2008 by Project HOS                                       
------------------------------------------------------------------------------
