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

1. 概要

  本ドキュメントは Hyper Operating System V4（以下 HOS-V4）の 78K0Rコア
  の固有部分についての説明を記載します。
  特に、NEC Electronics製のQB-78K0RKG3-TB にカスタマイズしていますので、
  他の製品で適用する場合は、一部機能が使えない場合があります。

2. 動作環境とその構築

2.1 CPUボード

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

- NEC Electronics製 QB-78K0RKG3-TB 基板

2.2 開発環境

NEC エレクトロニクス(株) の PM+(v6.31)+CC78K0R(w2.10)+RA78K0R(w1.31)で
動作確認しています。

2.3 HOSのコンパイル

　libh4v850.lib ライブラリの生成方法を記します。　2.3.1 は HOS-v4 共通の
作業となります。　ライブラリ生成方法は３通りの方法を想定し記載しており
ます。　2.3.2章では、PM+上で行う場合、2.3.3章では、msysやcygwin上で行う
場合、2.3.4章では、bcc5.5の環境を用いて、Windows 環境（command.com ）で
行う場合です。

2.3.1 HOS-v4共通 (hos4cfg.txt参照)
- hos4cfg.txt を参照のうえ、Windowsのネイティブコードを生成する環境で、
　hos4cfg.exe を生成してください。　あらかじめ用意された hos4cfg.exe を
　活用いただいても結構です。

- 今後、オリジナルな環境で開発を行うことを想定して、上記で生成した
　hos4cfg(.exe) を C:\WINDOWS\system32 など PATH が通っているところに
　コピーしておくと便利です。

2.3.2 78K0R固有部 (PM+ 環境下の場合)
　＜執筆中＞
- hos-v4/lib/78k0r/PM78K0R フォルダ内の libh478k0r.prw をPM+ 環境上で開い
　てください。　それぞれの libh478k0r.prw をダブルクリックしていただいても
　開けます。

- 開いた際に、PM+, CC78K0R などのバージョンの違いからワーニング、もしくは
　エラーが生じる可能性があります。　適宜修正を行ってください。
　（バージョンの違いであれば、修正のためのウィンドウが開きますので、
　　皆様の環境にあるコンパイラなどのバージョンを指定いただければ結構です）
　（フォルダ名の違いや、include ファイルが見つからない、というメッセージは、
　　無視していただいて結構です。　PM+ により自動修正されるはずです。）

- 上記フォルダの下に tmp という名前のフォルダがあることを確認してください。
　（なければ、tmp という名前で作成をしてください）
　tmp フォルダの下に、ライブラリ作成時の中間ファイル(.S, .o)を作成します。

- libh478k0r.libファイルの出力先を確認してください。
　特に、上記 libh478k0r.prwでバージョンの違いが指摘された場合は、変更が
　必須です。
　　[ツール] -> [アーカイバオプションの設定] -> [アーカイブファイル]
　アーカイブファイルにフォルダを指定しない場合は、libh478k0r.prw ファイルと
　同じフォルダにlibh478k0r.lib が生成されます。

- （リ）ビルドしてください。
　前libh478k0r.lib の出力先指定がされていれば、libh478k0r.lib が PM+ 環境に
　合わせてインストールされます。　この場合、コピー等不要です。　指定がされて
　いない場合は、ビルド後に皆様自身で適宜コピーを実施してください。


2.3.3 78K0R固有部 (msys, cygwin 環境下の場合)
- hos-v4/lib/78k0r/CC78K0R/に移動します。

- h478k0r.mkをコンパイラにあわせて変更します。
　　TOOLDIR1 : cc78k0r.exe のある binディレクトリ
　　TOOLDIR2 : ra78k0r.exe, lb78k0r.exe のある binディレクトリ

　現在の指定は、
　　TOOLDIR1= "C:\Program Files\NEC Electronics Tools\CC78K0R\W2.10"
　　TOOLDIR2= "C:\Program Files\NEC Electronics Tools\RA78K0R\W1.31"
　です。
　　$(TOOLDIR1)/bin に cc78k0r.exe などのコンパイラがある
　　$(TOOLDIR1)/include にコンパイラが使うヘッダディレクトリがある
　　$(TOOLDIR1)/lib にライブラリがある

- MSYS や Cygwin 上で make -f h478k0r.mk としてmakeします。

- libh478k0r.lib が生成されます。

- make -f h478k0r.mk install を実行します。
　生成されたlibh478k0r.libライブラリが $(TOOLDIR1)/lib/ 以下の
　ライブラリフォルダにコピーされます。

2.3.4 78K0R固有部 (Windowsコンソール環境下でbcc5.5のmakeを使う場合)
　bcc5.5 の make コマンドが環境変数 PATH に指定されていることが
　前提です。　標準のインストールの場合は、c:\borland\bcc55\bin の下に
　make.exe があると思いますので、Windows のシステムプログラムを起動し
　（コントロールパネルから、システムアイコンをクリックして起動し）
　[詳細設定]TAG -> [環境変数]ボタンをクリックの後、システム環境変数の
　PATH の項目に、make.exe のあるフォルダ名を追記してください。
　パス名の区切り文字は ; です。

- hos-v4/lib/78k0r/CC78K0R/に移動します。

- bcc55.mkをコンパイラにあわせて変更します。
　　TOOLDIR1 : cc78k0r.exe のある binディレクトリ
　　TOOLDIR2 : ra78k0r.exe, lb78k0r.exe のある binディレクトリ

　現在の指定は、
　　TOOLDIR1= "C:\Program Files\NEC Electronics Tools\CC78K0R\W2.10"
　　TOOLDIR2= "C:\Program Files\NEC Electronics Tools\RA78K0R\W1.31"
　です。
　　$(TOOLDIR1)/bin に cc78k0r.exe などのコンパイラがある
　　$(TOOLDIR1)/include にコンパイラが使うヘッダディレクトリがある
　　$(TOOLDIR1)/lib にライブラリがある

- Windows のコンソールを起動します。
　[スタート] -> [ファイル名を指定して実行] を選択の後、[名前]の
　枠内に、
　　　command
　と入力し、[OK] をクリックしてください。

- make -i -f bcc55.mk として make を実行してください。
　ここで、-i は command.com のコマンドなどでエラーがでた場合でも、
　実行を行うオプションです。

　もし、コンパイルエラーが生じても、そのまま次の make 作業が続行
　されることを避けたい場合は、-i オプションを使わなければ、エラー時に
　make がとまります。　使い分けてください。

- libh478k0r.lib が生成されます。

- make -f h478k0r.mk install を実行します。
　生成されたlibh478k0r.libライブラリが $(TOOLDIR1)/lib/ 以下の
　ライブラリフォルダにコピーされます。


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

2.4.1 サンプルプログラムをそのまま動かしてみる

- PM+ を起動し、hos-v4/sample/78k0r にあるプロジェクト sample を開きます。
　sample.prw をダブルクリックでも結構です。
　その際、２つのファイルが見つかりません、と（最初の１度だけ）表示されますが、
　無視していただいて結構です。　hos4cfg.exe にて system.cfg より生成する
　ファイルがパッケージには入れていないためのものです。

- バッチ・（リ）ビルドします。
　単なる（リ）ビルドでは、system.cfg の内容が反映されませんので、
　バッチ・（リ）ビルドを行うようにしてください。

- 生成されたa.hexをマイコン内蔵のフラッシュROMへ書き込みます。

2.4.2 OSタイマ用割込みについて
　system.cfg と ostimer.c にて、OSタイマ用の割込みを生成しています。
　TM00 を用いています。

2.5 コンフィギュレーションファイルのコンパイル
　2.4章のサンプルではバッチビルドを利用して、system.cfg を hos4cfg.exe に
　通して、kernel_cfg.c と kernel_id.h の生成を行っています。
　以下に設定方法を記します。

　PM+ においてプロジェクトを開いた状態にて以下を行い、プロジェクト毎に
　設定してください。　２種類の方法を記しておきます。

2.5.1 CA850 を利用する場合
- PM+メニュー [ビルド] -> [ビルド設定(G)...] にてビルド設定ウィンドウを開く。
- ウィンドウのタグ [ビルド前処理] を選ぶ。
- 下記の４コマンドを１つずつ追加する。
　（追加ボタンを押して１つずつ登録する）

１行目）　copy system.cfg system.c
２行目）　"c:\Program Files\NEC Electronics Tools\CA850\W3.20\bin\ca850.exe" -Xcxxcom -P system.c
３行目）　del system.c
４行目）　hos4cfg.exe system.i

　（注意）上記２コマンド目の ca850 のパスは半角スペースを含む場合、
　　　　　""ダブルクォーテーションにてくくって下さい。
　（注意）ca850.exe のパスは皆様の環境に合わせて設定してください。
　　　　　特にバージョンの違いにはご注意ください。
　　　　　(v3.20 -> W3.20, v3.30 -> W3.30)
　（注意）ca850.exe は .c など登録している拡張子しか通らないため、
　　　　　必ず、１つ目、３つ目のコマンドでファイル名変更が必要です。
　（注意）hos4cfg.exe のパスが通っていない場所にある場合は、
　　　　　ca850.exe 同様、絶対パス指定を行って下さい。

- 以上により、ビルドを実施する前に、４コマンドをビルドの度に実行されるように
　なります。

2.5.2 mcpp を利用する場合
- PM+メニュー [ビルド] -> [ビルド設定(G)...] にてビルド設定ウィンドウを開く。
- ウィンドウのタグ [ビルド前処理] を選ぶ。
- 下記の２コマンドを１つずつ追加する。
　（追加ボタンを押して１つずつ登録する）

１行目）　mcpp system.cfg > system.i
２行目）　hos4cfg.exe system.i

　（注意）上記１コマンド目の mcpp は、
　　　　　　http://sourceforge.net/project/showfiles.php?group_id=165953
　　　　　より取得して、mcpp.exe を
　　　　　　\windowsなど
　　　　　パスの通ったところに置いてください。
　（注意）hos4cfg.exe のパスが通っていない場所にある場合は、
　　　　　絶対パス指定を行って下さい。

- 以上により、ビルドを実施する前に、２コマンドをビルドの度に実行されるように
　なります。

2.6 レジスタバンクへの対応
　libh478k0r.lib は、生成時に __USE_RB__ を定義することでレジスタバンク
　もタスク切り替え時に保存するようにしています。　ライブラリ生成用の
　h478k0r.mk にて定義している AFLAGS, CFLAGS に -d__USE_RB__ を追加して
　ください（現在、# にて注釈文としていますので、# を消すだけで対応します）。

　今後の展開として、レジスタバンク0を通常のレジスタとし、RB1, RB2, RB3 は、
　機能割込み（たとえば、UART, CSI）専用に割り当てるなどを検討中です。
　現状の開発では、レジスタバンクは０のみ使用した開発をお勧めします。


3. メモリマップ（工事中）


4 割込み処理について

4.1 割込みの動作について
　現在、標準仕様として、TM00 の 16ビットカウンタを利用して、1msec.の
　周期タイマを実現しています。

4.2 割込みベクタ番号一覧（工事中）


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