(57)【特許請求の範囲】
【請求項１】
命令セットシミュレータとの間でデータの受渡しを行う仮想デバイスモデルによって周辺デバイスを模擬するシミュレーション装置において、
前記仮想デバイスモデルは、
周辺デバイスとのデータの受渡し方法を定義するデータであって少なくとも同期か非同期かの同期種別を含む定義データを保存する手段と、
前記定義データに従って動作する入出力処理手段と、
同期処理時に起動される同期処理手段と、
周辺デバイス固有の処理を実行する固有処理手段と、
前記固有処理手段から入力し、前記命令セットシミュレータへ渡すためのデータを保存する入力データ保存手段と、
前記命令セットシミュレータから入力し、前記固有処理手段へ渡すためのデータを保存する出力データ保存手段と、
を備え、
前記定義データの同期種別が非同期の場合は、出力処理については、前記入出力処理手段は、前記命令セットシミュレータから渡されたデータを逐次前記出力データ保存手段に保存し、前記固有処理手段は前記周辺デバイスを模擬した任意のタイミングで前記出力データ保存手段からデータを読み出して処理する一方、入力処理については、前記固有処理手段は逐次生成したデータを前記入力データ保存手段に保存し、前記入出力処理手段は前記命令セットシミュレータから入力要求のあったタイミングで前記入力データ保存手段からデータを読み出して前記命令セットシミュレータに渡し、
前記定義データの同期種別が同期の場合は、前記入出力処理手段は、前記命令セットシミュレータから出力要求を受け付けたときは、出力要求と共に前記命令セットシミュレータから渡されたデータを前記同期処理手段を介して前記固有処理手段に渡す一方、前記命令セットシミュレータから入力要求を受け付けたときは、前記同期処理手段を介して入力されたデータを前記命令セットシミュレータに渡すことを特徴とするシミュレーション装置。
【請求項２】
前記定義データは、さらに、受渡しデータのアドレス範囲ごとにどの関数を用いるかを指定するレジスタ種別を含み、
前記入出力処理手段は、
読込み専用レジスタのアクセス処理を実行する読込み専用関数と、
書込み専用レジスタのアクセス処理を実行する書込み専用関数と、
出力ＦＩＦＯ用レジスタのアクセス処理を実行する出力ＦＩＦＯ関数と、
入力ＦＩＦＯ用レジスタのアクセス処理を実行する入力ＦＩＦＯ関数と、
前記命令セットシミュレータからメモリ空間上に入力要求または出力要求があったときに、前記定義データのアドレス情報をもとに、前記各関数のうちいずれか一つを呼び出す入出力要求判定関数と、
を含むことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記同期処理手段は、前記定義データの同期種別が同期のときに起動される関数であって、
前記読込み専用関数から呼び出される読込み専用コールバック関数と、
前記書込み専用関数から呼び出される書込み専用コールバック関数と、
前記出力ＦＩＦＯ関数から呼び出される出力ＦＩＦＯコールバック関数と、
前記入力ＦＩＦＯ関数から呼び出される入力ＦＩＦＯコールバック関数と、
のうち少なくとも一つを備えていることを特徴とする請求項１または２に記載のシミュレーション装置。
【請求項４】
前記入力データ保存手段への入力データの書込みがあったときに、前記命令セットシミュレータに割込みの通知を行う割込み検出関数を備えたことを特徴とする請求項１または３のいずれか一項に記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアによって周辺デバイスを模擬する仮想デバイスモデルを用いたシミュレーション装置および仮想デバイスモデル構築方法に関する。
【背景技術】
【０００２】
一般に組込機器製品は外部からの入力信号をマイクロコンピュータのＣＰＵで処理し、その処理結果を出力することによって夫々の製品の機能を実現している。
【０００３】
従来、ソフトウェアプログラムを開発する際は、実際に組込機器製品である周辺デバイス（以下、「実機」という。）を製作し、その実機を使用してソフトウェアプログラムの開発を行っていた。しかし、近年汎用コンピュータ（以下、「ＰＣ」という。）上でソフトウェアによって周辺デバイスを模擬し、実機のＣＰＵと同じ機械語命令を実行する命令セットシミュレータ（ＩＳＳ：Instruction Set Simulator）を使用して当該周辺デバイスとの間で入出力処理を実行して目的のソフトウェアプログラムを開発するという仮想ハードウェア開発環境が提案されている。（例えば、特許文献１，２を参照のこと。）
【０００４】
この仮想ハードウェア環境によれば、製作したソフトウェアプログラムのバイナリコード（機械語）をそのまま実機で動作させられるだけでなく、ハードウェアの開発を待たずにソフトウェアプログラムの検証ができるため開発スケジュールに余裕ができるという利点がある。また、多人数で開発をする場合、実機台数の不足などの問題も無くなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１８１９６１号公報
【特許文献２】特開２０１３−２２８８３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、命令セットシミュレータ（ＩＳＳ）を使用した仮想ハードウェア開発環境においては、製品で必要となる周辺デバイスごとに、これら周辺デバイスをソフトウェア化した仮想デバイスモデルを作成する必要がある。周辺デバイスの仮想デバイスモデルは、命令セットシミュレータ（ＩＳＳ）のインタフェース（ＡＰＩ：Application Interface）に合わせて作成することになるが、周辺デバイスはその種類によって機能が異なるため、仮想デバイスモデルの作成に時間を要していた。
また作成者によって仮想デバイスモデルの作成方法が異なる場合もあり、結果として開発したソフトウェアプログラムの品質にばらつきが生じることもあった。
【０００７】
本発明はかかる従来の事情に対処してなされたものであり、効率よく、均一の品質で仮想デバイスモデルを作成することのできる仮想デバイスモデル構築方法を提供し、またこの仮想デバイスモデルを用いたシミュレーション装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明に係るシミュレーション装置は、命令セットシミュレータとの間でデータの受渡しを行う仮想デバイスモデルによって周辺デバイスを模擬するシミュレーション装置において、
前記仮想デバイスモデルは、
周辺デバイスとのデータの受渡し方法を定義するデータであって少なくとも同期か非同期かの同期種別を含む定義データを保存する手段と、
前記定義データに従って動作する入出力処理手段と、
同期処理時に起動される同期処理手段と、
周辺デバイス固有の処理を実行する固有処理手段と、
前記固有処理手段から入力し、前記命令セットシミュレータへ渡すためのデータを保存する入力データ保存手段と、
前記命令セットシミュレータから入力し、前記固有処理手段へ渡すためのデータを保存する出力データ保存手段と、
を備え、
前記定義データの同期種別が非同期の場合は、出力処理については、前記入出力処理手段は、前記命令セットシミュレータから渡されたデータを逐次前記出力データ保存手段に保存し、前記固有処理手段は前記周辺デバイスを模擬した任意のタイミングで前記出力データ保存手段からデータを読み出して処理する一方、入力処理については、前記固有処理手段は逐次生成したデータを前記入力データ保存手段に保存し、前記入出力処理手段は前記命令セットシミュレータから入力要求のあったタイミングで前記入力データ保存手段からデータを読み出して前記命令セットシミュレータに渡し、
前記定義データの同期種別が同期の場合は、前記入出力処理手段は、前記命令セットシミュレータから出力要求を受け付けたときは、出力要求と共に前記命令セットシミュレータから渡されたデータを前記同期処理手段を介して前記固有処理手段に渡す一方、前記命令セットシミュレータから入力要求を受け付けたときは、前記同期処理手段を介して入力されたデータを前記命令セットシミュレータに渡すことを特徴とする。
【０００９】
本発明では、周辺デバイスを模擬する仮想デバイスモデルを、基本的に非同期処理に対応させて入出力データを逐次保存するようにしておき、同期処理に対しては同期処理手段を起動して同期処理手段を介してデータを入出力することによって、命令セットシミュレータからの入出力要求に対してデータを同期させる構成としている。これにより、非同期処理の周辺デバイスおよび同期処理の周辺デバイスのいずれにも対応できる仮想デバイスを効率的に構築することができる。
【００１０】
好ましい実現方法としては、前記定義データに、さらに受渡しデータのアドレス範囲ごとにどの関数を用いるかを指定するレジスタ種別を加え、
前記入出力処理手段は、
読込み専用レジスタのアクセス処理を実行する読込み専用関数（ＲＯ関数）と、
書込み専用レジスタのアクセス処理を実行する書込み専用関数（ＷＯ関数）と、
出力ＦＩＦＯ用レジスタのアクセス処理を実行する出力ＦＩＦＯ関数と、
入力ＦＩＦＯ用レジスタのアクセス処理を実行する入力ＦＩＦＯ関数と、
前記命令セットシミュレータからメモリ空間上に入力要求または出力要求があったときに、前記定義データのアドレス情報をもとに、前記各関数のうちいずれか一つを呼び出す入出力要求判定関数で構成するのがよい。なお、前記入出力処理手段は、上記各関数のほか、読み書き可能なレジスタ（Ｒ／Ｗレジスタ）のアクセス処理を実行する読出し書込み関数（Ｒ／Ｗ関数）を設けるようにしてもよい。
【００１１】
また、前記同期処理手段としては、前記読込み専用関数から呼び出される読込み専用コールバック関数、前記書込み専用関数から呼び出される書込み専用コールバック関数、前記出力ＦＩＦＯ関数から呼び出される出力ＦＩＦＯコールバック関数、前記入力ＦＩＦＯ関数から呼び出される入力ＦＩＦＯコールバック関数、のうち少なくとも一つを周辺デバイスの機能に応じて選択的に実装する。
【００１２】
仮想デバイスモデルは、さらに前記入力データ保存手段への入力データの書込みがあったときに、前記命令セットシミュレータに割込みの通知を行う割込み検出関数を備えるようにしても良い。
【００１３】
また、本発明に係る仮想デバイスモデル構築方法は、上記仮想デバイスモデルを複数の周辺デバイスに共通な機能を有する共通処理部と各周辺デバイスに固有の機能を有する個別処理部とに分けて構築し、
前記定義データを保存する手段、前記入出力処理手段、前記入力データ保存手段、および前記出力データ保存手段を前記共通処理部に作成し、
前記同期処理手段および前記固有処理手段を前記個別処理部に作成することを特徴とする。
【００１４】
このとき、同期処理手段の各コールバック関数の動作に必要なデータおよび各コールバック関数を前記個別処理部に登録するコールバック関数登録関数を前記共通処理部に作成するのが好ましい。これにより効率的に仮想デバイスモデルを構築することができる。
【発明の効果】
【００１５】
以上の如く、本発明によれば、仮想デバイスモデルを、非同期処理に対応させて入出力データを逐次保存するようにしておき、同期処理に対しては同期処理手段を起動して同期処理手段を介してデータを入出力するので、非同期処理の周辺デバイスおよび同期処理の周辺デバイスのいずれにも対応できる仮想デバイスを簡便に構築することができる。
【００１６】
また、本発明に係る仮想デバイスモデル構築方法は、仮想デバイスモデルを複数の周辺デバイスに共通な機能を有する共通処理部と各周辺デバイスに固有の機能を有する個別処理部とに分けて構築するので、均一の品質の仮想デバイスモデルを効率よく構築することが可能になる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態による仮想デバイスモデルの概要説明図である。
【図２】図１の仮想デバイスモデルの機能ブロック図である。
【図３】図２の他の実施例による仮想デバイスモデルの機能ブロック図である。
【図４】図３に示す仮想デバイスモデルを実現するソフトウェア構成の説明図である。
【図５】周辺ＩＯレジスタ定義ファイルに保存されている定義情報の一例を示す説明図である。
【図６】レジスタ種別異常処理の定義の一例を示す説明図である。
【図７】入出力要求判定関数のフローチャートである。
【図８】入出力要求判定関数の引数の例を示す図である。
【図９】ログ保存処理の処理手順を示すフローチャートである。
【図１０】Ｒ／Ｗ関数のフローチャートである。
【図１１】ＲＯ関数のフローチャートである。
【図１２】ＷＯ関数のフローチャートである。
【図１３】入力ＦＩＦＯ関数のフローチャートである。
【図１４】出力ＦＩＦＯ関数のフローチャートである。
【図１５】割込み検出関数のフローチャートである。
【図１６】ログ動作定義のデータ例を示す図である。
【図１７】ログ保存関数のプログラム例である。
【図１８】ログ保存データフォーマットの一例を示す図である。
【図１９】本実施の形態による仮想デバイスモデルの使用例を示す図である。
【図２０】図１９の個別処理部の他の使用例を示す図である。
【図２１】本実施の形態によるレジスタ種別の説明図である。
【図２２】入出力要求判定関数のプログラム例である。
【図２３】入出力データ読込み関数のプログラム例である。
【図２４】入出力データ書込み関数のプログラム例である。
【図２５】入力データ書込み関数のプログラム例である。
【図２６】出力データ読込み関数のプログラム例である。
【図２７】出力ＦＩＦＯ読込み関数のプログラム例である。
【図２８】入力ＦＩＦＯ書込み関数のプログラム例である。
【図２９】割込み検出関数のプログラム例である。
【図３０】コールバック関数登録関数のプログラム例である。
【図３１】コールバック関数登録テーブルのデータ例である。
【図３２】命令セットシミュレータ・インタフェース（ＩＳＳ−ＩＦ）の割込み通知部のプログラム例である。
【図３３】Ｒ／Ｗコールバック関数のプログラム例である。
【図３４】ＲＯコールバック関数のプログラム例である。
【図３５】ＷＯコールバック関数のプログラム例である。
【図３６】入力ＦＩＦＯコールバック関数のプログラム例である。
【図３７】出力ＦＩＦＯコールバック関数のプログラム例である。
【発明を実施するための形態】
【００１８】
以下に本発明に係る仮想デバイスモデルを用いたシミュレーション装置の実施の形態を図面を参照しながら説明する。なお、命令セットシミュレータについて従来の技術を用いるため説明を割愛する。
本実施の形態によるシミュレーション装置１は汎用的なコンピュータシステムによって実現することができる。
【００１９】
図１は仮想デバイスモデルの概要説明図である。ここで、アプリケーションプログラム２１は命令セットシミュレータ２２上で動作する製品固有のプログラムで、開発対象プログラムである。このアプリケーションプログラム２１は、周辺デバイスに対して、メモリ空間の割り付けられたレジスタへのデータの読出し処理／書込み処理（以下、「Ｒ／Ｗ処理」という。）を行うことで、動作設定や入出力データの受渡しを行う。
図１において、命令セットシミュレータ２２は命令セットシミュレータ本体２２ａと、周辺デバイス用インタフェース（ＩＳＳ−ＡＰＩ）２２ｂで構成されている。
【００２０】
仮想デバイスモデル２３は、命令セットシミュレータ・インタフェース（ＩＳＳ−ＩＦ）２４、複数の周辺デバイスに共通の機能を有する周辺デバイスモデル共通処理部（以下、単に「共通処理部」という。）２５、および各周辺デバイスに固有の機能を有する周辺デバイスモデル個別処理部（以下、単に「個別処理部」という。）２６から構成されている。
【００２１】
一般に異なる命令セットシミュレータ２２を用いると、そのインタフェース仕様も異なるが、仮想デバイスモデル２３に命令セットシミュレータ・インタフェース２４を設けることによって、命令セットシミュレータ２２のインタフェース仕様の違いを吸収でき、模擬対象の周辺デバイスとの間でインタフェース仕様を統一することができる。
【００２２】
仮想デバイスモデル２３は、さらに周辺デバイスの種類ごとにその受渡し方法の定義データを保存する手段である周辺ＩＯレジスタ定義ファイル３３を備える。仮想デバイスモデル２３には、この他、エラーを記録するエラーログファイル３１，イベントの発生を記録するイベントログファイル３２，ログ動作を定義するログ動作定義ファイル３４を設けることもできる。
【００２３】
周辺ＩＯレジスタ定義ファイル３３は、アプリケーションプログラム２１に提供する周辺デバイスの機能を、機能ごとに一定範囲のアドレスが割り付けられたメモリ空間（以下、「レジスタ」という。）に設定するものである。この周辺ＩＯレジスタ定義ファイル３３に設定される定義データにより、周辺デバイスモデル共通処理部２５の動作が決定される。
【００２４】
また、ログ動作定義ファイル３４は、イベントログファイル３２、エラーログファイル３１の保存処理実行の有無や保存方法を定義する。イベントログファイル３２は入出力要求の全てのイベントを記録し、エラーログファイル３１は入出力要求のイベントログのうち、エラーが発生したもののみを記録する。
【００２５】
上記の周辺ＩＯレジスタ定義ファイル３３、ログ動作定義ファイル３４、イベントログファイル３２、およびエラーログファイル３１は、シミュレーション装置１の有する記憶装置（図示せず）に作成される。
【００２６】
図２は、上記の仮想デバイスモデル２３の機能ブロック図である。
この図において、仮想デバイスモデル２３の個別処理部２６は、同期処理時に起動される同期処理手段９２と、周辺デバイス固有の処理を実行する固有処理手段９１とを有している。
【００２７】
一方、共通処理部２５は、周辺デバイスの動作や周辺デバイスとのデータの受渡し方法を定義するデータ（定義データ）を保存する周辺ＩＯレジスタ定義ファイル３３、この定義データに従って動作する入出力処理手段８１（関数群）、固有処理手段９１から入力し、命令セットシミュレータ２２へ渡すためのデータを保存する入力データファイル８４（入力データ保存手段）、および命令セットシミュレータ２２から入力し、固有処理手段９１へ渡すためのデータを保存する出力データファイル８５（出力データ保存手段）を備えている。
【００２８】
なお、入出力処理手段８１、固有処理手段９１、同期処理手段９２は、詳細は後述するが関数群として実現することができる。入力データファイル８４と出力データファイル８５はシミュレーション装置１のメモリ上に作成される。
【００２９】
次に、この仮想デバイスモデル２３の動作を説明する。
仮想デバイスモデル２３の入出力処理手段８１や固有処理手段９１は、周辺ＩＯレジスタ定義ファイル３３の定義データに基づいて動作する。
【００３０】
定義データとしては図５に例示するように、例えば同期処理か非同期処理かを指定する同期種別が含まれて、同期種別が非同期の場合は、出力処理については、入出力処理手段８１は、命令セットシミュレータ２２から渡されたデータを逐次出力データファイル８５に保存し、固有処理手段９１は周辺デバイスを模擬した任意のタイミングで出力データファイル８５からデータを読み出して処理する。一方、入力処理については、固有処理手段９１は逐次生成したデータを入力データファイル８４に保存し、入出力処理手段８１は命令セットシミュレータ２２から入力要求のあったタイミングで入力データファイル８４からデータを読み出して命令セットシミュレータ２２に渡す。
【００３１】
定義データの同期種別が同期の場合は、入出力処理手段８１は、命令セットシミュレータ２２から出力要求を受け付けたときは、出力要求と共に命令セットシミュレータ２２から渡されたデータを同期処理手段９２を介して固有処理手段９１に渡し、命令セットシミュレータ２２から入力要求を受け付けたときは、同期処理手段９２を介して入力されたデータを命令セットシミュレータ２２に渡す。
【００３２】
この同期処理手段９２と固有処理手段９１は、個別処理部２６として模擬する周辺デバイスごとに作成し、他の入出力処理手段８１や各ファイルは、共通処理部２５として各周辺デバイス共通に作成することによって仮想デバイスモデル２３を効率よく構築することができる。
【００３３】
例えば非同期処理については共通処理部２５の機能として既に組み込まれているので、非同期処理の周辺デバイスについては単に共通処理部２５として設けられた入力データファイル８４あるいは出力データファイル８５との間で当該周辺デバイス独自のタイミングでデータの受渡しをすればよいので、省力化を図ることができる。
図３は、他の実施例による仮想デバイスモデル２３の機能ブロック図である。図２に対して、入出力データ保存手段８８、入出力データ読込手段８６、および入出力データ書込手段８７を追加している。これらの手段８６〜８８を介して入出力処理手段８１と固有処理手段９１の双方からデータの入出力が可能になっている。
【００３４】
同じアドレスに対して入出力可能な共有メモリで周辺デバイスとの間でデータの受渡しをするような場合には、命令セットシミュレータ２２と固有処理手段９１の双方から入出力可能な入出力データ保存手段８８を仮想デバイスモデル２３の共通処理部２５として設け、当該データの同期処理を実行する同期処理手段９２を個別処理部２６に設けるようにするのが好ましい。
【００３５】
図４は、図３に示す仮想デバイスモデル２３を実現するソフトウェア構成の説明図である。図４に示すように仮想デバイスモデル２３は、ＩＳＳ−ＩＦ２４、共通処理部２５、個別処理部２６で構成されている。以下、詳細に説明する。
【００３６】
（１）命令セットシミュレータ・インタフェース（ＩＳＳ−ＩＦ）
ＩＳＳ−ＩＦ２４は、ＩＳＳ２２の持つ固有のインタフェース（ＩＦ）仕様の違いを吸収することによって、周辺デバイスモデル共通処理を可能にしている。ＩＳＳ−ＩＦ２４は、入出力要求処理ＩＦ部４１と割込み通知部４２の２つの機能を有している。
【００３７】
１）入出力要求処理
アプリケーションプログラム２１からのレジスタアクセス要求は、メモリへの書込み要求とメモリからの読出し要求の２種類あるが、入出力要求処理ＩＦ部４１はＩＳＳ２２経由でこの要求を受け取ると、周辺デバイスモデル共通処理部２５内の入出力要求判定関数４３を呼び出す。
【００３８】
なお、ＩＳＳ２２の有するＩＳＳ−ＡＰＩ２２ｂは、ＩＳＳ２２のインタフェース仕様に合わせて、読み書き関数の１種類、または、読込み関数と書込み関数の２種類のいずれかで構成されているが、いずれの場合でもこの入出力要求判定関数４３を呼び出す。以下は、読込み関数、書込み関数の２種類が実装されている場合を例にして説明するが、基本的な動作は読み書き関数１種類の場合も同様である。
【００３９】
２）割込み通知
周辺デバイスモデル共通処理部２５は、周辺デバイスモデル個別処理部２６からの入力データの書込みがあった時に、図５に例示する周辺ＩＯレジスタ定義ファイル３３に従って、ＩＳＳ２２の割込み通知部４２を呼び出して割込み通知を行う。
【００４０】
（２）共通処理部
共通処理部２５は、周辺ＩＯレジスタ定義ファイル３３のレジスタ種別ごとの処理を共通化している。
【００４１】
共通処理部２５の入出力処理手段８１は、読み書き可能なレジスタ（Ｒ／Ｗレジスタ）のアクセス処理を実行するＲ／Ｗ関数４４、読込み専用レジスタ（ＲＯレジスタ）のアクセス処理を実行するＲＯ関数４５、書込み専用レジスタのアクセス処理を実行するＷＯ関数４６、出力ＦＩＦＯ用レジスタのアクセス処理を実行する出力ＦＩＦＯ関数４７、入力ＦＩＦＯ用レジスタのアクセス処理を実行する入力ＦＩＦＯ関数４８、および入出力要求処理ＩＦ部４１の関数から呼び出され、アドレス情報から周辺ＩＯレジスタ定義ファイル３３を参照して、上記のどの関数を呼び出すか決定する入出力要求判定関数４３から構成されている。
【００４２】
ＩＳＳ−ＩＦ２４から呼び出された入力ＦＩＦＯ関数４８は、入力ＦＩＦＯデータ記憶部６３からデータを読み出した後に入力ＦＩＦＯコールバック関数７５を呼び出す。これは、ＦＩＦＯが満杯（フル）で書き込めなくなった状態のときに、ＦＩＦＯからの読出しが発生し、次のデータが書き込めることを通知するためである。
【００４３】
なお、入力ＦＩＦＯデータ記憶部６３にデータが書き込まれたときは、入力ＦＩＦＯ関数４８はＲＯレジスタ、Ｒ／ＷレジスタでＩＳＳ−ＩＦ２４へ書き込まれたことを通知するため入力ＦＩＦＯコールバック関数７５の呼び出し処理は行わない。
【００４４】
入出力データ読込手段８６は、周辺デバイスモデル個別処理部２６が、周辺デバイスモデル共通処理部２５内にある入出力データを読出す関数である入出力データ読込み関数４９として実現できる。
【００４５】
入出力データ書込手段８７は、周辺デバイスモデル個別処理部２６が、周辺デバイスモデル共通処理部２５内にある入出力データに書込む関数である入出力データ書込み関数５０として実現できる。
【００４６】
入力データ書込手段８２は、周辺デバイスモデル個別処理部２６が周辺デバイスモデル共通処理部２５内にある入力データに書込む関数である入力データ書込み関数５１、周辺デバイスモデル個別処理部２６が、周辺デバイスモデル共通処理部２５内にある入力ＦＩＦＯデータを書込む関数である入力ＦＩＦＯ書込み関数５４、および入力ＦＩＦＯ書込み関数５４で書き込まれた、入力ＦＩＦＯ内のデータ格納数を読出す関数である入力ＦＩＦＯカウンタ状態関数５５で実現できる。
【００４７】
出力データ読込手段８３は、周辺デバイスモデル個別処理部２６が、周辺デバイスモデル共通処理部２５内にある出力データを読出す関数である出力データ読込み関数５２と、周辺デバイスモデル個別処理部２６が周辺デバイスモデル共通処理部２５内にある出力ＦＩＦＯデータを読出す関数である出力ＦＩＦＯ読出し関数５３で実現できる。
【００４８】
（３）周辺デバイスモデル個別処理部２６
周辺デバイスモデル個別処理部２６の同期処理手段９２は、ＩＳＳ−ＩＦ２４から周辺デバイスモデル共通処理部２５内の入出力データ記憶部５８に値が書きこまれたとき、または、ＩＳＳ−ＩＦ２４から読出し要求が来て、アクセス要求のあったレジスタの同期種別が同期の場合に周辺デバイスモデル共通処理部２５から呼び出されるＲ／Ｗコールバック関数７１、ＩＳＳ−ＩＦ２４から読出し要求が来て、そのレジスタの同期種別が同期の場合に呼び出されるＲＯコールバック関数７２、ＩＳＳ−ＩＦ２４から周辺デバイスモデル共通処理部２５内の出力データ記憶部６０に値が書きこまれたときに、周辺デバイスモデル共通処理部２５から呼び出されるＷＯコールバック関数７３、ＩＳＳ−ＩＦ２４から周辺デバイスモデル共通処理部２５内の出力ＦＩＦＯデータ記憶部６１に値が書き込まれたときに、周辺デバイスモデル共通処理部２５から呼び出される出力ＦＩＦＯコールバック関数７４、およびＩＳＳ−ＩＦ２４から周辺デバイスモデル共通処理部２５内の入力ＦＩＦＯデータ記憶部６３から数値が読み込まれたときに、周辺デバイスモデル共通処理部２５から呼び出され、固有処理手段９１に読込みが発生したことを通知する入力ＦＩＦＯコールバック関数７５から構成されている。
【００４９】
固有処理手段９１は、入力ＦＩＦＯカウンタ状態関数５５の情報に従って、必要に応じて読出しを行うように構成されている。
なお、周辺デバイスモデル個別処理部２６内の上記コールバック関数を登録する関数であるコールバック関数登録関数５６を周辺デバイスモデル共通処理部２５に設けるのが好ましい。
【００５０】
図５は，周辺ＩＯレジスタ定義ファイル３３に保存されている定義情報であり、レジスタ（R/W,RO,WO、入力FIFO、出力FIFO）ごとに別ファイルで設定される。
図５において、先頭アドレスはＣＰＵ上のメモリアドレスを表わす。ビット幅は、先頭アドレスからのアクセスビット幅を表わしている。
【００５１】
また、レジスタ種別としては、レジスタのアクセスの種類が規定され、Ｒ／Ｗ（Read /Write:読み書き可能メモリ），ＲＯ（Read Only:読込み専用メモリ），ＷＯ（Write Only：書込み専用メモリ），入力ＦＩＦＯ（周辺デバイスから受け取るデータのＦＩＦＯメモリ），出力ＦＩＦＯ（周辺デバイスに出力するデータのＦＩＦＯメモリ）がある。なお，ＦＩＦＯは、First-In First-Out：先入れ先出しを意味する。
【００５２】
ビット位置は、ビット幅＝１のときのビット位置を示し、レジスタ種別異常処理は、書込み専用メモリに読込みが発生した時などの通常使用しないが、アプリケーションプログラム２１から来る可能性のある要求が来た場合の異常処理を規定する。（詳細は、図６参照のこと）。
【００５３】
同期種別は、レジスタ種別Ｒ／Ｗ,ＲＯの場合に、読出し要求が来たときに周辺デバイスに対しての読出し方法等を指定する。例えば、非同期読出し：コールバック関数を読み出さずに、共通処理部２５で保存しているデータをそのまま返す。一方、同期読出しは、コールバック関数を読み出し、コールバック関数内で値を読み出し、その最新値を呼び出しもとに返す。
また、Ｒ／Ｗの書込みとＷＯの書込み時には、コールバック関数は呼び出され、これにより、データが書き込まれたことが固有処理手段９１へ通知される。
【００５４】
割込み入力は、割込み検出の種別と発生させる割込み番号を設定する。割込み入力は、割込み検出種別（レベル/エッジ、Low/High）と発生させる割込み番号を設定する。
なお割込み番号が、所定値（例えば「−１」）のときは割込み検出をしない。
【００５５】
固定値は、レジスタ種別異常処理で使用するアプリケーションに返す固定の値を指定できる最大のビット幅（例えば６４ビット）で入力する。また、ＦＩＦＯの最大格納数は、入力ＦＩＦＯ,出力ＦＩＦＯを指定したときに、ＦＩＦＯの格納最大数を指定する。
【００５６】
図６にレジスタ種別異常処理の定義を示す。レジスタごとに異常処理を定義する。レジスタ種別によって設定項目が異なる。基本的に、読出し用レジスタに書込み要求が来たとき、あるいは書込み用レジスタに読出し要求が来たときにエラーとする。また、定義ビット幅と要求ビット幅が異なる場合は所定の処理（エラー判定を含む）を実行する、という動作を設定することができる。
例えば、ＲＯレジスタを例にとると、当該ＲＯレジスタに書込み要求が来た時にはＩＳＳ２２へは復帰値（異常）を返し、書込み処理は実行しない。
【００５７】
また、要求ビット幅が定義のビット幅以下の場合は、入力データの値を要求のビット幅で返す。一方、要求ビット幅が定義のビット幅よりも大きい場合は、連続したアドレスの定義がある場合はその値を返し、その定義がない部分は固定値を返す。  
他のレジスタについても同様に異常処理を定義することができる。
【００５８】
次に、入出力要求判定関数４３の処理手順について図７を用いて説明する。
ＩＳＳ２２からの要求は、メモリのリード／ライトで行われるので、図８に例示するような引数となる。なお、ＩＳＳ２２によっては、必ずしもビットのインタフェースを持つとは限らないので、ＩＳＳ２２の指定がバイト数の場合は、ビット（8,16,32ビット）に変換して定義を行う。
【００５９】
入出力要求判定関数４３は、ＩＳＳ−ＩＦ２４の入出力要求処理ＩＦ部４１から起動されると、指定アドレスの定義検索を行い、入出力要求処理ＩＦ部４１のアクセスアドレスと同じアドレスが、周辺ＩＯレジスタ定義ファイル３３の先頭アドレスにあるか否かを検索し、定義の有無に応じて次の処理を行う（Ｓ１）。
【００６０】
ステップＳ１において、定義がある場合は、該当するレジスタ種別に対応する関数を呼び出し（Ｓ２〜Ｓ７）、夫々の関数を実行後、後述する図９に示すログ保存処理を実行する（Ｓ８）。
【００６１】
一方、ステップＳ１において定義がない場合は、次に書込み要求か否かを判定し（Ｓ９）、書込み要求の場合は、無処理として（Ｓ１０）、復帰値はエラーとする（Ｓ１１）。一方、ステップＳ９において、書込み要求で無い場合は、読出し値として固定値（例えば、全て０ｘｆｆの値）を返し（Ｓ１２）、復帰値はエラーとする（Ｓ１１）。そして、ログ保存処理を実行する（Ｓ８）。
【００６２】
次に、各レジスタ種別に対応する関数の処理手順について説明する。
（Ｒ／Ｗ関数）
図１０に、Ｒ／Ｗ関数のフローチャートを示す。
Ｒ／Ｗ関数４４は、入出力要求判定関数４３から呼び出されると、まず読込み要求か、書込み要求かを判定し（Ｓ１０１）、読込み要求の場合は、周辺ＩＯレジスタ定義ファイル３３の同期種別で「同期」が指定されている場合は（Ｓ１０２）、上述した要求データ幅のチェックを行う（Ｓ１０３）。
【００６３】
具体的には、要求ビット幅（読込み要求のあったデータのビット幅）と定義ビット幅（周辺ＩＯレジスタ定義ファイル３３の「ビット幅」）によって、下記の処理を行う。
「要求ビット幅  ＜＝  定義ビット幅」の場合は、最新値の読出し関数としてＲ／Ｗコールバック関数７１を呼び出す（Ｓ１０４）。
「要求ビット幅  ＞  定義ビット幅」の場合は、周辺ＩＯレジスタ定義ファイル３３に関連アドレスの定義がある場合は（Ｓ１０８）、必要数のＲ／Ｗコールバック関数７１を呼び出す（Ｓ１０９）。一方、該当するレジスタがない場合は（Ｓ１０８で「ＮＯ」）、固定値を返す（Ｓ１１０）。
【００６４】
そして要求データ幅別の処理判定を行う（Ｓ１０５）。なお、ステップＳ１０２において「非同期」の場合は、何もせず直ちにステップＳ１０５へ移行する。
ステップＳ１０５において、まず、要求ビット幅と定義ビット幅とを比較し、同じ場合、入出力データ記憶部５８から指定されたデータ読み出して（Ｓ１１１）、正常終了とする（Ｓ１１２）。
【００６５】
「要求ビット幅  ＜  定義ビット幅」の場合は、指定ビット幅の入出力データを読出す（Ｓ１１３）。「要求ビット  ＞  定義ビット幅」の場合は、不足分は固定値を入れて読み出す（Ｓ１１７）。そして、要求ビットと定義ビット幅が等しくない場合の戻り値としては、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ビット幅異常」「読出し時」の定義に従って処理を行う（Ｓ１１４〜Ｓ１１６）。
【００６６】
一方、ステップＳ１０１で書込み要求の場合は、要求ビット幅と定義ビットのビット幅を比較する（Ｓ１１８）。
ステップＳ１１８の比較の結果、両ビット幅が同じ場合は、入出力データ記憶部５８に指定されたデータを保存し、Ｒ／Ｗコールバック関数７１を呼び出すことでアプリケーションプログラム２１に書込みが発生したことを通知する（Ｓ１１９，Ｓ１２０）。
【００６７】
ステップＳ１１８の比較の結果、「要求ビット  ＜  定義ビット」の場合は（Ｓ１２４）、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ビット幅異常」「連続書込み」が可の時に、指定ビット幅分だけ入出力データ記憶部５８に書込みを行い、Ｒ／Ｗコールバック関数７１を呼び出すことでアプリケーションプログラム２１に書込みが発生したことを通知する（Ｓ１２５）。
【００６８】
また、ステップＳ１１８の比較の結果、「要求ビット  ＞  定義ビット」で「連続書込み」が不可の時には（Ｓ１３０で「ＮＯ」）、該当するアドレスの定義のビットサイズ分だけ入出力データに書込みを行い（Ｓ１３２）、Ｒ／Ｗコールバック関数７１を呼び出すことでアプリケーションプログラムに書込みが発生したことを通知する（Ｓ１２５）。
【００６９】
図１１に、ＲＯ関数４５のフローチャートを示す。
ＲＯ関数４５は、入出力要求判定関数４３から呼び出されると、まず読込み要求か、書込み要求かを判定し（Ｓ２０１）、読込み要求の場合は上述したＲ／Ｗ関数４４の読込み要求時の処理（Ｓ１０２〜Ｓ１１７）と同じ処理を行う（Ｓ２０２〜Ｓ２１７）。なお、このときステップＳ２０４，Ｓ２０９で呼び出す関数は、ＲＯコールバック関数７２である。
【００７０】
ステップＳ２０１で書込み要求の場合は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「書込み要求異常」の設定にしたがって復帰値を返す（Ｓ２１８〜Ｓ２２０）。
【００７１】
図１２に、ＷＯ関数４６のフローチャートを示す
ＷＯ関数４６は、入出力要求判定関数４３から呼び出されると、まず読込み要求か、書込み要求かを判定し（Ｓ３０１）、書込み要求の場合はＲ／Ｗ関数の書込み要求時の処理（Ｓ１１８〜Ｓ１３２）と同じ処理を行う（Ｓ３０２〜Ｓ３１６）。
【００７２】
ステップＳ３０１で読込み要求の場合は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「読込み要求異常」「読込み値」に従って次の値を返す。すなわち、「読込み値=ＷＯ」の場合は、前回の書き込んだ値を返し（Ｓ３１９）、「読込み値=固定値」の場合は、定義された固定値を返す（Ｓ３１８）。
そして、戻り値は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「読込み要求異常」「復帰値」設定に従って復帰値を返す（Ｓ３２０〜Ｓ３２２）。
【００７３】
図１３に、入力ＦＩＦＯ関数４８のフローチャートを示す。
入力ＦＩＦＯ関数４８は、入出力要求判定関数４３から呼び出されると、まず読込み要求か、書込み要求かを判定し（Ｓ４０１）、書込み要求の場合は周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」（図６参照）の入力ＦＩＦＯの「書込み要求異常」欄の設定にしたがって、「正常復帰」または「エラー復帰」の復帰値を返す（Ｓ４１７〜Ｓ４１９）。
【００７４】
一方、ステップＳ４０１で読込み要求の場合は、入力ＦＩＦＯデータの有無を入力ＦＩＦＯカウンタ６４で確認する（Ｓ４０２）。その結果、入力ＦＩＦＯデータ記憶部６３にデータがない場合は（Ｓ４０２で「ＮＯ」）、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ＦＩＦＯデータなし」「読込み値」の設定に従い、固定値か、ＦＩＦＯの最後の値を返すかを決定する（Ｓ４０３〜Ｓ４０５）。また、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ＦＩＦＯデータなし」「復帰値」の設定に従って復帰値を決定する（Ｓ４０６〜Ｓ４０８）。
【００７５】
一方、ステップＳ４０２で、入力ＦＩＦＯデータ記憶部６３にデータがある場合は、要求ビット幅と定義ビット幅との比較によって、次の処理を行う。すなわち、「要求ビット幅＝定義ビット幅」の場合は、入力ＦＩＦＯデータを読み込む（Ｓ４１０）。「要求ビット幅  ＜  定義ビット幅」の場合は、入力ＦＩＦＯの値を指定のビット幅で返す（Ｓ４１１）。また、「要求ビット幅  ＞  定義ビット幅」は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ビット幅異常」「読込み値」の設定に従って、入力ＦＩＦＯ値を返すか、あるいは固定値を返すかを決定する（Ｓ４１２）。
【００７６】
入力ＦＩＦＯデータ記憶部６３からデータを読み出したら、入力ＦＩＦＯカウンタ６４をデクリメント（−１）にして（Ｓ４１３）、周辺ＩＯレジスタ定義ファイル３３「レジスタ種別異常処理定義」「ビット幅異常」「復帰値」に従って復帰情報を決定する（Ｓ４１４〜Ｓ４１６）。そして、正常終了の場合は（Ｓ４１５）、入力ＦＩＦＯコールバック関数７５を呼び出す（Ｓ４２０）。
【００７７】
図１４に、出力ＦＩＦＯ関数４７のフローチャートを示す。
出力ＦＩＦＯ関数４７は、入出力要求判定関数４３から呼び出されると、まず読込み要求か、書込み要求かを判定し（Ｓ５０１）、読込み要求の場合は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「読込み要求異常」「読込み値」の設定にしたがって値を決定し（Ｓ５２１〜Ｓ５２３）、復帰値は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「読込み要求異常」「復帰値」に従って値を決定する（Ｓ５２４〜Ｓ５２６）。
【００７８】
ステップＳ５０１で書込み要求の場合は、出力ＦＩＦＯデータの書込み可否を出力ＦＩＦＯカウンタ６２で確認する（Ｓ５０２）。  
その結果、出力ＦＩＦＯデータ記憶部６１がフル（満杯）の場合は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ＦＩＦＯ満杯」「書込み値」の設定に従って、出力ＦＩＦＯデータ記憶部６１の最後に上書きするかを決定する（Ｓ５１６，Ｓ５１７）。また、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ＦＩＦＯ満杯」「復帰値」の設定に従って復帰値を決定する（Ｓ５１８〜Ｓ５２０）。
【００７９】
ステップＳ５０２で、出力ＦＩＦＯデータ記憶部６１に空きがあり書き込める場合、要求ビット幅と定義ビット幅によって、次の処理を行う（Ｓ５０３）。すなわち、「要求ビット幅＝定義ビット幅」の場合は、出力ＦＩＦＯデータ記憶部６１にデータを書き込んだ後（Ｓ５０４）、出力ＦＩＦＯカウンタ６２をインクリメント（＋１）して（Ｓ５０５）、出力ＦＩＦＯコールバック関数７４を呼び出す（Ｓ５０６）。復帰情報は、出力ＦＩＦＯコールバック関数７４の戻り値に依存する（Ｓ５０７）。
【００８０】
ステップＳ５０３で、「要求ビット幅  ＜  定義ビット幅」の場合は、復帰情報をビット幅異常とする（Ｓ５０８）。「要求ビット幅  ＞  定義ビット幅」の場合は、周辺ＩＯレジスタ定義ファイル３３の「レジスタ種別異常処理定義」「ビット幅異常」「書込み」の設定に従って、出力ＦＩＦＯデータ記憶部６１に書込みを行うか決定する（Ｓ５０９）。「可」すなわち書込みを行う場合には、定義のビット幅で書込みを行う（Ｓ５１０〜Ｓ５１２）。
復帰値は、書込み可の場合出力ＦＩＦＯコールバック関数７４の復帰値を設定し、書込み不可の場合はビット幅異常とする（Ｓ５１３〜Ｓ５１５）。
【００８１】
図１５に、割込み検出関数６５のフローチャートを示す。なお、入力ＦＩＦＯデータ記憶部６３への書込みは、割込み通知レジスタＲ／Ｗ,ＲＯのいずれかで実現する。
【００８２】
入出力データ書込み関数５０、及び、入力データ書込み関数５１は、データ書込み後、割込み検出関数６５を呼び出す。割込み検出関数６５は、周辺ＩＯレジスタ定義ファイル３３の割込みの定義の有無を確認し割込みを通知する。
【００８３】
また、図９にログ保存処理、図１６にログ動作定義を示す。
ログ保存処理は、ログ動作定義に従ってログ（記録データ）を保存する。
図１６の例では、ログ動作定義は、エラーログ・トレースログ個別に、保存の有無、保存する場合の保存方法（追加保存、サイクリック）がある。図９は、図１６のログ動作定義に従って、保存するフローを示している。
【００８４】
以下、図９のログ保存処理について詳述する。
まず、最初にログを保存するためにＰＣの時刻を読み出す（Ｓ９０１）。この時刻は、エラーログ、トレースログ両方に使用する。
【００８５】
＜エラーログ保存＞
・エラーログ保存種別=0の場合、ログを保存しない（Ｓ９０２）。
保存するデータが第一引数のiStatusがエラー（0以外）の場合はエラーログとして保存する。
・エラーログ保存種別=１の場合、ログを追加保存する（Ｓ９０５）。
・エラーログ保存種別=２の場合、サイクリックにログを保存する（Ｓ９０６〜Ｓ９０８）。
【００８６】
＜トレースログ保存＞
・トレースログ保存種別=0の場合、ログを保存しない（Ｓ９１０）
トレースログは、前後の操作が分かるようにエラーを含めた全てを保存する。
・トレースログ保存種別=１の場合、ログを追加保存する（Ｓ９１１）
・トレースログ保存種別=２の場合、サイクリックにログを保存する（Ｓ９１２〜Ｓ９１４）。
【００８７】
以下に関数例を示す。
図１７のログ保存関数は、共通処理の内部関数である。また図１８にログ保存データフォーマットを示す。
【００８８】
図１８において、ＮＯ．２は、ログ保存処理をする時に時間を読み出して保存するものである。ＮＯ.１，３、４，５以外は、ログ保存処理の引数をそのまま保存するものである。ＮＯ．６のデータは、ＮＯ．３,４の設定に従って、１，８，１６，３２，６４ビットのデータを格納することを意味している。
【００８９】
図１９に使用例を示す。また図２０（ａ），（ｂ）に個別処理部２６の他の例を示す。図１９と図２０は個別処理部２６，２６ａ２６ｂは異なるものの、ＩＳＳ−ＩＦ２４と共通処理部２５は共通している。またこの場合、周辺デバイスによって使用するレジスタ種別が異なるが、図２１の使用例に示すように５種類のレジスタ種別に集約できる。
【００９０】
次に、共通関数インタフェースの例を示す。
図２２〜図３０は、周辺デバイスモデル共通処理部２５またはＩＳＳ−ＩＦ２４で用いられる関数である。
【００９１】
入出力要求判定関数４３、入出力データ読込み関数４９、入出力データ書込み関数５０、入力データ書込み関数５１、出力データ読込み関数５２、出力ＦＩＦＯ読出し関数５３、入力ＦＩＦＯ書込み関数５４、割込み検出関数６５、およびコールバック関数登録関数５６プログラム例を夫々図２２〜図３０に示す。なお、コールバック関数登録関数５６は、図３１に例示するコールバック関数登録テーブルに基づいて登録を行う。
【００９２】
また図３２はＩＳＳ−ＩＦ２４の割込み通知部４２のプログラム例である。
周辺デバイスモデル個別処理部２６のコールバック関数、Ｒ／Ｗコールバック関数７１、ＲＯコールバック関数７２、ＷＯコールバック関数７３、入力ＦＩＦＯコールバック関数７５、および出力ＦＩＦＯコールバック関数のプログラム例を夫々図３３〜図３７に示す。
【００９３】
以上、本実施の形態によれば、周辺デバイスを模擬する仮想デバイスモデルを、基本的に非同期処理に対応させて入出力データを逐次保存するようにしておき、同期処理に対しては同期処理手段を呼び出して当該同期処理手段を介してデータを入出力するので、非同期処理の周辺デバイスおよび同期処理の周辺デバイスのいずれにも対応できる仮想デバイスを効率的に構築することができる。
【００９４】
また、仮想デバイスモデルを複数の周辺デバイスに共通な機能を有する共通処理部と各周辺デバイスに固有の機能を有する個別処理部とに分けて構築するので、均一の品質の仮想デバイスモデルを効率よく構築することが可能になる。
【符号の説明】
【００９５】
１    シミュレーション装置
２１    アプリケーションプログラム
２２    命令セットシミュレータ
２２ａ    命令セットシミュレータ本体
２３    仮想デバイスモデル
２４    命令セットシミュレータ・インタフェース（ＩＳＳ−ＩＦ）
２５    周辺デバイスモデル共通処理部（共通処理部）
２６，２６ａ２６ｂ    周辺デバイスモデル個別処理部（個別処理部）
３１    エラーログファイル
３２    イベントログファイル
３３    周辺ＩＯレジスタ定義ファイル
３４    ログ動作定義ファイル
４１    入出力要求処理ＩＦ部
４２    割込み通知部
４３    入出力要求判定関数
４４    Ｒ／Ｗ関数
４５    ＲＯ関数
４６    ＷＯ関数
４７    出力ＦＩＦＯ関数
４８    入力ＦＩＦＯ関数
４９    入出力データ読込み関数
５０    入出力データ書込み関数
５１    入力データ書込み関数
５２    出力データ読込み関数
５３    出力ＦＩＦＯ読出し関数
５４    入力ＦＩＦＯ書込み関数
５５    入力ＦＩＦＯカウンタ状態関数
５６    コールバック関数登録関数
５８    入出力データ記憶部
６０    出力データ記憶部
６１    出力ＦＩＦＯデータ記憶部
６２    出力ＦＩＦＯカウンタ
６３    入力ＦＩＦＯデータ記憶部
６４    入力ＦＩＦＯカウンタ
６５    割込み検出関数
７１    Ｒ／Ｗコールバック関数
７２    ＲＯコールバック関数
７３    ＷＯコールバック関数
７４    出力ＦＩＦＯコールバック関数
７５    入力ＦＩＦＯコールバック関数
８１    入出力処理手段
８２    入力データ書込手段
８３    出力データ読込手段
８４    入力データ保存手段（入力データファイル）
８５    出力データ保存手段（出力データファイル）
８６    入出力データ読込手段
８７    入出力データ書込手段
８８    入出力データ保存手段
９１    固有処理手段
９２    同期処理手段
【図１】
0006394169.tif 000002
【図２】
0006394169.tif 000003
【図３】
0006394169.tif 000004
【図４】
0006394169.tif 000005
【図５】
0006394169.tif 000006
【図６】
0006394169.tif 000007
【図７】
0006394169.tif 000008
【図８】
0006394169.tif 000009
【図９】
0006394169.tif 000010
【図１０】
0006394169.tif 000011
【図１１】
0006394169.tif 000012
【図１２】
0006394169.tif 000013
【図１３】
0006394169.tif 000014
【図１４】
0006394169.tif 000015
【図１５】
0006394169.tif 000016
【図１６】
0006394169.tif 000017
【図１７】
0006394169.tif 000018
【図１８】
0006394169.tif 000019
【図１９】
0006394169.tif 000020
【図２０】
0006394169.tif 000021
【図２１】
0006394169.tif 000022
【図２２】
0006394169.tif 000023
【図２３】
0006394169.tif 000024
【図２４】
0006394169.tif 000025
【図２５】
0006394169.tif 000026
【図２６】
0006394169.tif 000027
【図２７】
0006394169.tif 000028
【図２８】
0006394169.tif 000029
【図２９】
0006394169.tif 000030
【図３０】
0006394169.tif 000031
【図３１】
0006394169.tif 000032
【図３２】
0006394169.tif 000033
【図３３】
0006394169.tif 000034
【図３４】
0006394169.tif 000035
【図３５】
0006394169.tif 000036
【図３６】
0006394169.tif 000037
【図３７】
0006394169.tif 000038