home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix Heaven Sunny 2
/
APPARE2.BIN
/
oh_towns
/
his
/
his.doc
next >
Wrap
Text File
|
1995-06-20
|
23KB
|
571 lines
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□ □
□ ハードウェア割り込み支援ライブラリ □
□ □
□ 1995.6.12 by ちょもらんま □
□ □
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
0.目次
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
1.概要
2.ファイル一覧
3.ライブラリのインストール
4.サンプルプログラムについて
5.本ライブラリの使い方
6.割り込みハンドラの書きかた
7.各関数の説明
8.スタックについて
9.ソースリストについて
10.著作権について
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
1.概要
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
C言語のプログラムから、ハードウェア割り込みを使用するためのライブラリです。
例えばキーボードから文字を入力するとき、ひたすらキーボードを監視し続けるよ
り、キー入力があったときだけキー入力関数が起動するようにしたほうがエレガントで
すよね? このように「外部デバイスから要求があったときに、あらかじめ用意してい
た関数を起動させる」仕組みを、ハードウェア割り込みといいます。ハードウェア割り
込みが利用できるようになると、ハードの細かい制御が可能となり、プログラミングの
幅が大きく広がります。
残念ながら、C言語だけではハードウェア割り込みのようなハードに密着した処理は
記述はできません。このような処理を書くためには、アセンブラが必要になってしまう
のです。しかし、C言語では書けない部分をアセンブラで書いてリンクリンクすれば、
C言語のプログラムからでも割り込みが利用できます。
そこで、アセンブラがないと書けない部分を、ライブラリという形でC言語のプログ
ラムから利用できるようにしたのが、この「ハードウェア割り込み支援ライブラリ」で
す。C言語では書けない部分も含め、ハードウェア割り込みにからむ面倒な処理は、す
べてライブラリが勝手にやってくれますので、気軽に自作アプリケーションからハード
ウェア割り込みを利用することができます。
割り込みが使いたくてうずうずしていたみなさん!このライブラリを使って、あなた
の野望を実現させて下さい(笑)。
なお、本ライブラリを利用するためには富士通のCコンパイラ「High-C」が必
要です(最新バージョンである必要はありません)。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
2.ファイル一覧
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
+--SAMPLE
| +--VSYNC.C サンプルプログラム(VSYNC割り込み)
| +--VSYNC.EXP (↑の実行ファイル)
| +--KEY.C サンプルプログラム(キーボード割り込み)
| +--KEY.EXP (↑の実行ファイル)
| +--STACK.C サンプルプログラム(スタックの使用量の確認)
| +--STACK.EXP (↑の実行ファイル)
|
+--SOURCE
| +--MAKEFILE メイクファイル
| +--HIS.H 割り込みライブラリを利用するためのインクルードファイル
| +--HISINNER.H ライブラリのソースに共通のインクルードファイル
| +--HISL1.ASM ライブラリのソース
| +--HISL2.ASM 同上
| +--HISL3.ASM 同上
| +--HISL4.ASM 同上
| +--HISL5.ASM 同上
| +--HISL6.C 同上
| +--HISL7.C 同上
| +--HISL8.C 同上
| +--HISL9.C 同上
| +--HISL10.C 同上
| +--HISL11.C 同上
| +--HISL12.C 同上
| +--HIS.LBC ライブラリアン用コマンドファイル
| +--HIS.MAP ライブラリに含まれるモジュールの一覧
|
+--HIS.H 割り込みライブラリを利用するためのインクルードファイル
+--HIS.LIB ライブラリ本体
+--HIS.DOC いま読んでいるファイル
+--HIS.GGG 本ライブラリの簡単な説明
|
+--OMAKE
+--VSYNC.C 1995年3月号の「VSYNC期間を活用する」のサンプル
+--VSYNC.EXP 同上
+--VSYNCI.ASM 1995年3月号の「VSYNC期間を活用する」のサンプル
+--VSYNCI.ASM 同上
+--README.DOC OMAKEディレクトリの内容の説明
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
3.ライブラリのインストール
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
ライブラリを使用するときに必要なのは、インクルードファイル「HIS.H」とラ
イブラリ本体「HIS.LIB」の2つです。
「HIS.H」は、High-Cをインストールしたディレクトリのなかにある「
INC」ディレクトリに、「HIS.LIB」は、やはりHigh-Cをインストール
したディレクトリのなかにある「SMALL」ディレクトリに入れてください。
[インストール例]
+--BIN - - - - - - - - - - - <DIR> 94-08-09 18:26
| +--HCD386P.EXP - - - - - - - - - - 670437 94-05-16 14:37
| (略)
|
+--SMALL - - - - - - - - - - - <DIR> 94-08-09 18:26
| +--HCC.LIB - - - - - - - - - - 199680 94-05-16 14:37
| +--HCE.LIB - - - - - - - - - - 253952 94-05-16 14:37
| +--TBIOS.LIB - - - - - - - - - - 35328 94-05-16 14:37
| (略)
| +--HIS.LIB - - - - - - - - - - 5632 95-06-12 19:09
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+--INC - - - - - - - - - - - <DIR> 94-08-09 18:26
| +--STDIO.H - - - - - - - - - - 7851 94-05-16 14:37
| +--DOS.H - - - - - - - - - - 7151 94-12-30 7:38
| +--EGB.H - - - - - - - - - - 8673 94-05-16 14:37
| +--MOS.H - - - - - - - - - - 4119 94-05-16 14:37
| (略)
| +--HIS.H - - - - - - - - - - 1940 95-06-12 23:36
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
(後略)
インクルードファイル「HIS.H」は、ソース中で
#include <his.h>
として読み込むことができます。本ライブラリを利用するときには、必ずこの1行を
ソースの始めのほうに書いてください。
ライブラリ本体「HIS.LIB」は、普段お使いの「HCE.LIB」や「TBI
OS.LIB」などと同じように、リンク時に、リンクファイルなどで指定して利用し
て下さい。
-lib e:\high_c\small\hce
e:\high_c\small\tbios
e:\high_c\small\his.h
^^^^^^^^^この部分は、ご自分の環境に合わせて書き直してください。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
4.サンプルプログラムについて
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
サンプルプログラムは、3本あります。
・VSYNC.C
VSYNC(垂直同期)割り込みを使用するサンプルです。VSYNC割り込みが発
生するたびに、画面の左端から順に青い縦棒を書いて行きます。描画はVSYNC期間
中に行われますので、残像が残ったりせず綺麗に描かれていきます。
また、VSYNC割り込みは常に60分の1秒毎に発生しますから、機種の違い、高
速モード・互換モードの違いにかかわらず、一定速度で動きます。環境にかかわらず一
定速度で動作するプログラムが作れるのも、割り込みの醍醐味の1つです。
・KEY.C
キーボード割り込みを使用するサンプルです。キーボード入力待ちに割り込みを利用
しています。
起動するとあの目玉TOWNS(小さいけど)が表示されます。この目玉TOWNS
は、[←]キーで左に、[→]キーで右に移動します。画面の端に達したらプログラムは終
了です。
・STACK.C
割り込みハンドラが消費するスタックの大きさを調べるためのサンプルです。詳細
は、後述の「6.スタックについて」を参照してください。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
5.本ライブラリの使い方
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
とっても簡単。 (^_^)
(1)スタック領域を登録する。
(2)割り込みハンドラを登録する。
(3)割り込みを許可する。
(4)割り込みハンドラを登録から外す。
これだけです。詳しく説明しましょう。サンプルプログラムを適宜参照しながら読ん
で下さい。
(1)スタック領域を確保する。
スタック領域とは、自動変数の値や、関数の呼び出し元などを記録しておく領域のこ
とです。Cで書かれた関数を動かすためには欠かせない領域ですので、予めスタック領
域を確保したうえで、 HIS_stackArea関数を用いてこの領域を登録しておきます。スタ
ック領域をどのくらい確保すれば良いかは、後述の「8.スタックについて」を参照し
てください。
(2)割り込みハンドラを登録する。
割り込みハンドラを HIS_setHandler 関数を用いて登録します。割り込みの種類は
「割り込みレベル」で指定してください。
割り込みレベルは、次のようになります。
0 タイマ
1 キーボード
2 RS-232C
3 拡張RS-232C
4 I/O拡張ユニット
5 I/O拡張ユニット
6 FPD
8 SCSI
9 CD-ROM
10 I/O拡張ユニット
11 VSYNC
12 プリンタ
13 FM,PCM
14 I/O拡張ユニット
15 (リザーブ)
(3)割り込みを許可する。
割り込みハンドラを登録した直後は、割り込み禁止状態になっていますので、
HIS_enableInterrupt 関数で割り込みを「許可」します。この操作により、もし割り込
みが発生すれば、(2)で登録した割り込みハンドラが実行されることになります。
(4)割り込みハンドラを登録から外す。
割り込みハンドラの登録を HIS_detachHandler関数を用いて解除します。以後、ユー
ザープログラムの割り込みハンドラが呼び出されることはありません。
登録した割り込みハンドラは、プログラムの終了までに必ず外しておいて下さい。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
6.割り込みハンドラの書きかた
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
割り込みハンドラというのは、割り込みが起こったときに呼び出される関数です。割
り込みハンドラには「(VSYNC割り込みが起こったら)ああする」とか、「(キー
入力があったら)こうする」とかいったような処理を、記述することができます。ただ
し、割り込みハンドラは通常のプログラムとは異なった状況で実行される関数ですか
ら、次のようなことに注意してください。
注意点その1:割り込みハンドラでは、なるべくハンドラ外の関数を使用しない。
「ハンドラ外の関数」には、High-C標準のライブラリ関数も含みます。これ
は不便ですが、仕方ありません。割り込みが発生する前に実行されていたプログラ
ムと割り込みハンドラの処理が衝突して、誤動作を起こす恐れがあるためです。と
くに、入出力関係の関数は、なるべく使わない方が無難です。とくに、割り込みハ
ンドラ実行中は割り込みが使えませんので、キー入力など割り込みを使っていそう
な関数は、厳禁です)。
ただし、ハンドラ外の関数を全く利用できないというわけではありません。割り
込みハンドラで使っている関数を、ハンドラの外では使わないなどの工夫をすれ
ば、たいがいの関数は問題なく使えるはずです。
注意点その2:割り込みハンドラの処理は、最小限度にとどめる。
割り込みハンドラで重い処理をしていると、その分通常のプログラムの実行速度
が低下します。このようなことが起こらないよう、割り込みハンドラの処理は、で
きればフラグを立てる程度の簡単な処理にとどめておいた方がいいでしょう。
注意点その3:割り込み原因を解除する。
割り込みハンドラの処理が終わったら、そのことをTOWNS君に教えてあげる
必要があります。このやり方は、割り込みの種類によって違います。例えば、
VSYNC割り込みの場合は「割り込み原因クリアレジスタ(I/Oアドレス05
CAh)」に書き込みをする、キーボード割り込みの場合には「キーボードデータ
レジスタ(I/Oアドレス0600h)」の値を読み出す、といった具合です。詳
細は、「FMTOWNSテクニカルデータブック(アスキー社刊行、千葉憲昭著)
」を参照してください。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
7.各関数の説明
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
(1)関数一覧
HIS_checkIntNumber 割り込みレベルが正常かチェックする
HIS_checkMask 指定された割り込みがマスク(禁止)されているか調べる
HIS_detachHandler 割り込みハンドラの登録を解除する
HIS_disableAllInt 全てのハードウェア割り込みを禁止する
HIS_disableInterrupt 指定されたハードウェア割り込みを禁止する
HIS_enableAllInt 「全てのハードウェア割り込みの禁止」を解除する
HIS_enableInterrupt 指定されたハードウェア割り込みを許可する
HIS_getCS コードセグメントのセレクタの値を読む
HIS_getDS データセグメントのセレクタの値を読む
HIS_readIMR IMR(インタラプトマスクレジスタ)の値を読む
HIS_setHandler 割り込みハンドラを登録する
HIS_stackArea スタック領域を登録する
HIS_writeIMR IMR(インタラプトマスクレジスタ)に書き込みをする
実際に良く使うのは、「5.本ライブラリの使い方」で紹介した
HIS_stackArea HIS_setHandler HIS_enableInterrupt HIS_detachHandler
の4つでしょう。これ以外はオマケと思っていただいて結構です。(^^;)
(2)各関数の説明
---------------------------------------------------------------------------
○HIS_checkIntNumber 割り込みレベルが正常かチェックする
int HIS_checkIntNumber( int intnum );
intnum : ハードウェア割り込みレベル
戻り値 : HIS_NoError = 正常終了
その他の値は、後述の「(3)int型関数共通戻り値」参照
指定されたハードウェア割り込みレベルが正常な値かどうかチェックします。具体的
には、0~15の値であれば正常です。
---------------------------------------------------------------------------
○HIS_checkMask 指定された割り込みがマスク(禁止)されているか調べる
int HIS_checkMask( int intnum );
intnum : ハードウェア割り込みレベル
戻り値 : HIS_intMasked = 割り込みは禁止されている
HIS_intUnmasked = 割り込みは許可されている
指定されたレベルのハードウェア割り込みが許可されているかどうかをチェックしま
す。
---------------------------------------------------------------------------
○HIS_detachHandler 割り込みハンドラの登録を解除する
int HIS_detachHandler( int intnum );
intnum : ハードウェア割り込みレベル
戻り値 : HIS_NoError = 正常終了
その他の値は、後述の「(3)int型関数共通戻り値」参照
指定されたハードウェア割り込みレベルの割り込みハンドラ(直前にHIS_setHandler
関数によって登録されたハンドラ)の登録を外します。指定されたレベルの割り込みに
ついては、割り込みの許可・禁止の状態等も含め、直前のHIS_setHandler関数を実行す
る前の状態に完全に戻ります。
登録した割り込みハンドラは、この関数を使って、プログラムの終了までに必ず外し
ておいて下さい。
---------------------------------------------------------------------------
○HIS_disableAllInt 全てのハードウェア割り込みを禁止する
#define HIS_disableAllInt() _inline( 0xfa )
全てのハードウェア割り込みを禁止します。定義からわかるように、
HIS_disableAllIntは関数ではなく、割り込み禁止を意味する機械語(CLI)に展開
されるマクロです。HIS_enableAllIntと対で、一時的に全ての割り込みを禁止したいと
きに使います。
---------------------------------------------------------------------------
○HIS_disableInterrupt 指定されたハードウェア割り込みを禁止する
void HIS_disableInterrupt( int intnum );
intnum : ハードウェア割り込みレベル
指定されたハードウェア割り込みを禁止します。割り込みハンドラは、たとえ登録さ
れていても呼び出されなくなります。
---------------------------------------------------------------------------
○HIS_enableAllInt 「全てのハードウェア割り込みの禁止」を解除する
#define HIS_enableAllInt() _inline( 0xfb )
HIS_disableAllintの効果を打ち消します。定義からわかるように、
HIS_enableAllIntは関数ではなく、割り込み許可を意味する機械語(STI)に展開さ
れるマクロです。HIS_disableAllIntと対で、一時的に全ての割り込みを禁止したいと
きに使います。
---------------------------------------------------------------------------
○HIS_enableInterrupt 指定されたハードウェア割り込みを許可する
void HIS_enableInterrupt( int intnum );
intnum : ハードウェア割り込みレベル
指定されたハードウェア割り込みを許可します。この関数の実行後、あらかじめ
HIS_setHandler関数で登録されていた関数が呼び出されるようになります。
なお、この関数を使って HIS_disableAllInterrupt関数で禁止した割り込みを許可す
ることはできません。
---------------------------------------------------------------------------
○HIS_getCS コードセグメントのセレクタの値を読む
unsigned short HIS_getCS( void );
戻り値 : コードセグメントのセレクタの値(CSレジスタの値)
コードセグメントのセレクタの値(CSレジスタの値)を知りたいときに使います。
---------------------------------------------------------------------------
○HIS_getDS データセグメントのセレクタの値を読む
unsigned short HIS_getDS( void );
戻り値 : データセグメントのセレクタの値(DSレジスタの値)
データセグメントのセレクタの値(DSレジスタの値)を知りたいときに使います。
---------------------------------------------------------------------------
○HIS_readIMR IMR(インタラプトマスクレジスタ)の値を読む
int HIS_readIMR( void );
戻り値 : IMR(インタラプトマスクレジスタ)の値
IMR(インタラプトマスクレジスタ)の値を読み取ります。b0-b7がマスタ側、
b8-b15がスレーブ側の値です。b16-b31は意味を持ちません。
なお、IMRというのはハードウェア割り込みコントローラ(PIC)内部のレジス
タ(I/Oアドレス0002h、0012h)です。詳細はアスキーの「FMTOWN
Sテクニカルデータブック」を参照してください。
---------------------------------------------------------------------------
○HIS_setHandler 割り込みハンドラを登録する
int HIS_setHandler( int intnum , void (*handler)() );
intnum : ハードウェア割り込みレベル
handler : 割り込みハンドラへのポインタ
戻り値 : HIS_NoError = 正常終了
その他の値は、後述の「(3)int型関数共通戻り値」参照
指定された割り込みハンドラを、指定されたハードウェア割り込みの割り込みハンド
ラして登録します。割り込みは一時的に禁止されますが、HIS_enableInterrupt関数を
実行すると登録した割り込みハンドラが稼働可能になります。
本関数を呼ぶにあたって、古い割り込みハンドラを退避したりする必要はありませ
ん。ライブラリのほうで面倒を見てくれます。
また、前に登録した割り込みハンドラを外す前に新しく別の割り込みハンドラを登録
した場合、古い割り込みハンドラは一時的に無効になり、新しい割り込みハンドラが有
効となります。古い割り込みハンドラは、 HIS_detachHanlder関数によって新しい割り
込みハンドラが外されたとき、再び有効になります。
---------------------------------------------------------------------------
○HIS_stackArea スタック領域を登録する
char *HIS_stackArea ( char *stack , int stacksize );
stack : スタック領域の先頭位置のポインタ
stacksize : スタック領域の大きさ
戻り値 : 登録完了 -> スタック領域の先頭位置のポインタ
登録解除 -> NULL
割り込みハンドラで使用するためのスタック領域を登録します。この領域は、16種
全てのハードウェア割り込みハンドラで共通に使われます。
stack == NULL または stacksize == 0 のときはスタック領域の登録は解除され、関
数の戻り値は NULL となります。
---------------------------------------------------------------------------
○HIS_writeIMR IMR(インタラプトマスクレジスタ)に書き込みをする
void HIS_writeIMR( int value );
value : IMR(インタラプトマスクレジスタ)に書き込む値
IMR(インタラプトマスクレジスタ)に書き込みをします。b0-b7がマスタ側、
b8-b15がスレーブ側に書き込まれます。b16-b31は意味を持ちません。
(3)int型関数共通戻り値
本ライブラリのほとんどのint型関数では、以下に示されるリターンコードを返しま
す。
HIS_NoError 正常終了
HIS_OtherHandler すでに他のハンドラが登録されているが、
新規のハンドラが稼働する。
HIS_IllegalIntNumber 割り込みレベルが不正である。
HIS_OutofMemory メモリ不足。
HIS_NoHandler 登録されている割り込みハンドラはない。
HIS_UnexpectedSize 変数のサイズが予想と異なり、本ライブラリは実行不可。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
8.スタックについて
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
「6.(1)スタック領域を確保する。」でも述べたように、スタック領域とは、自
動変数の値や、関数の呼び出し元などを記録しておく領域のことです。Cで書かれた関
数を動かすためには欠かせない領域ですので、予めスタック領域を確保したうえで、
HIS_stackArea関数を用いてこの領域を登録しておきます。
スタック領域を確保するとき問題になるのは、どの位の大きさの領域を確保すべきか
ということでしょう。実際に実験して割り込みハンドラがスタックをどの程度使うのか
調べてみると、この問題に答えを出すことができます。
サンプルの「STACK.C」を見てください。このプログラムは、割り込みハンド
ラがどの位スタック領域を使用したか教えてくれます。スタック領域をあらかじめ適当
な値(何でもよいのですが、このサンプルではABhにしました)で埋めたあと、割り
込みハンドラを動かしてスタック領域がどこまで使われたのか調べているわけです(ス
タック領域は、終わりの方から先頭に向かって使われていきます)。
割り込みハンドラがどの程度スタック領域を消費しているのか知りたくなったら、こ
の「STACK.C」を参考に実験して、調べてみてください。
なお、スタック領域は余裕をもって、なるべく大きめにしておくのがよいでしょう。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
9.ソースリストについて
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
「SOURCE」ディレクトリには、本ライブラリのソースリストが収録されていま
す。アセンブラソースの方は、386|ASMをお持ちの方なら、問題なくコンパイ
ル、アセンブルできると思います。
問題はCのソースです。実は、「High-Cマルチメディア(開発)キット」を使
っている場合、インクルードファイル「DOS.H」にバグがあるためエラーが発生し
てしまい、コンパイルできません。そこで、「DOS.H」を書き換える必要がありま
す。
「DOS.H」の50行目前後に
#ifdef _I386
という行がありますが、これをコメントにしてしまいます。
/*#ifdef _I386*/
この #ifdef と対になっている #else , #endif が80行目前後にありますので、この
あたりもコメントにします。
/*
#else
extern _Far void (* _dos_getvect(unsigned __intnumber))();
extern void _dos_setvect(unsigned __intnumber,_Far void (*v)());
#endif
*/
これで、コンパイルできるようになります。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
10.著作権について
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
本ライブラリ、サンプル、及び本ドキュメントの著作権は、作者の私、安田知弘(
ちょもらんま)が所有しています。
本ライブラリを組み込んだアプリケーションの作成は、もちろん自由に行って構いま
せんし、作成したアプリケーションの配付も制限しません。ライブラリそのものの再配
付もしてくださって構いませんが、その際は本ドキュメントも含め、全てまとめて(
OMAKEディレクトリは除く)行ってください。
また、本ライブラリを改造してアプリケーションに組み込むことも、ドキュメントに
一言書いておいて下さるかぎり、制限しません。ただし、改造したものをライブラリと
して再配付する場合には、別途作者の許可が必要です。
なお、作者は、本ライブラリ及びドキュメントを利用した結果生じた損害に対して、
一切責任を負いません。