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


1. 概要

  本ドキュメントは Hyper Operating System V4（以下 HOS-V4）の
Intel IA32(PC/AT互換機）用の固有部分についての説明を記載します。



2. ライブラリのmake方法

2.1. ツールの準備

  IA32版のHOS-V4を利用する場合，i386-elf形式のバイナリを作成する
ためのクロス環境を構築することをお勧めします．

http://sourceforge.jp/projects/hos/docman/ にある
「Linux上でのIA32(Intel Architecture 32)クロス環境構築手順」
という文書を参考にGNUのクロスコンパイル環境を構築してください．

2.2.ライブラリのmake法

　2.1. で作成したクロスコンパイル用ツール群にPATHを通した上で，
以下の作業を行います．

  (1) lib/ia32/ia32gccに移る．
  (2) make -f i386-elf.mak コマンドを発行する． 

2.3.サンプルプログラムの実行法
　HOS-V4のアーカイブに同梱されているIA32用のサンプルプログラム
は，主要なLinuxディストリビューションで採用されているGRUB
（Grand Unified Boot Loader）から起動可能なファイル形式に
なっています．GRUBを用いてブートする環境であれば，作成した
バイナリをGRUBのkernelオプションでカーネルに指定することで，
HOS-V4 IA32版を動作させることが可能です．

また、作成したサンプルをフロッピーから起動させるためのスクリプトも
付属しています。 

例として，RedHat Linux 8.0上で, HOS-V4のアーカイブに同梱されているIA32
用のサンプルプログラムをフロッピーから起動させるための手順を以下に示し
ます．

  (1) コンフィグレータ構築 
      configディレクトリに移り 
         make -f gcc.mak 
     コマンドを発行する 
  (2) サンプルプログラムの構築 
      sample/ia32gccディレクトリに移り 
         make -f i386-elf.mak 
     コマンドを発行する 
  (3) ブートディスク作成 
      sample/ia32gccディレクトリに 
      sample.bin 
     が出来ていることを確認した上で， 
     以下のa)からb)を行います． 
     a) 空のフロッピーディスクをFDドライブに 
        挿入． 
     b) make -f i386-elf.mak disk 
     とコマンドを入力 
  (3)で作成したディスクをいれてPCを起動する． 

3. IA32固有の関数
3.1. 割り込みマスク取得/設定関数
  多重割り込みの制御に際して，割り込みマスクを設定する関数が、
HOS-V4/IA32独自に実装されています．


    ER chg_imsk(IMSK imsk)          割り込みマスク値の変更
    ER get_imsk(IMSK *p_imsk)       割り込みマスク値の参照

HOS-V4 IA32版では, IMSKを16ビットの符号なし整数として定義しています．
IA32を搭載したPC/AT互換機では，マスターとスレーブの合計2基の
割込みコントローラが搭載されています．

  HOS-V4 IA32版では，IMSK値の上位8ビットにマスターコントローラ，
下位8ビットにスレーブコントローラの割込みマスク値を
割り当てています．

IMSKの各ビットの意味は以下のようになります．
	1) 0.. 7ビット目．．．スレーブコントローラの割込みマスク値
	2) 8..15ビット目．．．マスターコントローラの割込みマスク値

get_imskを呼び出すことで現在のマスク値が上記フォーマットで
取得されます．また，割込みをマスクしたいIRQに対応したビットを
立ててchg_imskを呼び出すことで割込みマスクを設定することができます.

IRQとIMSK内のビット位置, および典型的なPC/AT機において，
そのIRQの割込みを使用するデバイスの対応関係については,
付録A 「PC/AT互換機での割込み」を参照してください．


3.2. 割り込みマスク設定関数上の注意

　HOS-V4 IA32では,   IMSKの10ビット目が立っていないことを確認して，
set_imsk呼び出すようにしてください．
　これは，PC/AT互換機の設計上，マスターの割込みコントローラの
カスケード接続部分をマスクするとスレーブの割込み（IRQ8から15の割込み）が
上がらなくなるためです．

4. ATT_ISRにおける割込み番号指定法

　HOS-V4 IA32では，ATT_ISRの割込み番号をデバイスが使用する割込みの
IRQ番号に0x20を加えた値(ベクタ番号)で指定します．
IRQ番号と典型的なPC/AT機においてそのIRQを使用するデバイスとの対応関係
については，付録Aを参照ください．  

付録A PC/AT互換機での割込み

ベクタ番号(16進)  IRQ IMSK内のビット位置  デバイス
0x20		    0  8	 	  ティックタイマ(i8254 PIT)
0x21		    1  9 		  キーボード
0x22		    2 10		  カスケード
					  （スレーブコントローラへの接続）
0x23		    3 11		  COM2
0x24		    4 12 	 	  COM1
0x25		    5 13		  予約（ISA/PCIカード等で使用）
0x26		    6 14		  フロッピーディスクコントローラ
0x27		    7 15		  パラレルポート
0x28		    8  0		  RTC(Real Time Clock)
0x29		    9  1		  IRQ2の割込みのリダイレクト
0x2a		   10  2		  予約（ISA/PCIカード等で使用）
0x2b		   11  3		  予約（ISA/PCIカード等で使用）
0x2c		   12  4		  マウス（PS/2)
0x2d		   13  5		  数値演算コプロセッサ
0x2e		   14  6		  IDE（プライマリ）
0x2f		   15  7		  IDE（セカンダリ）


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