(57)【要約】【課題】外部ハードウエアを必要とすることなく、ターゲットプログラムに対する多様な入出力データ、タイミングを用いたシミュレーションを実現する。【解決手段】ターゲットプログラムの命令を実行する命令実行部（１４０）と、実行中のターゲットプログラムから外部アプリケーションに通知されるべきメッセージと、ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持部（２００）と、イベントを検出するイベント検出部（１７０，１５０，１９０）と、イベント検出の通知を受けて、メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、外部アプリケーションに直接送信するメッセージ送信部（２１０）とを具備する。【選択図】　　　図２
2004094800.tif 000002
【特許請求の範囲】
【請求項１】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション装置であって、
前記ターゲットプログラムの命令を実行する命令実行部と、
実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持部と、
前記メッセージ定義保持部が保持する前記メッセージ定義中のイベントと、前記命令実行部により実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出部と、
前記イベント検出部によりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信部とを具備する
ことを特徴とするプログラムシミュレーション装置。
【請求項２】
前記メッセージ定義は、
各メッセージごとに、前記ターゲットプログラムと前記外部アプリケーションとの間のメッセージ送受信が、同期型であるか非同期型であるかを示すメッセージ属性を含み、
前記イベント検出部により検出されたイベントに対応するメッセージが、非同期型のメッセージ属性である場合には、前記命令実行部は、前記メッセージの前記外部アプリケーションへの送信直後に、前記ターゲットプログラムの命令の実行を再開する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項３】
前記メッセージ定義は、
各メッセージごとに、前記ターゲットプログラムと前記外部アプリケーションとの間のメッセージ送受信が、同期型であるか非同期型であるかを示すメッセージ属性を含み、
前記イベント検出部により検出されたイベントに対応するメッセージが、同期型のメッセージ属性である場合には、前記命令実行部は、前記メッセージの前記外部アプリケーションへの送信から、前記外部アプリケーションからのメッセージ受信までの間、前記ターゲットプログラムの命令の実行を停止する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項４】
前記メッセージ送信部は、
前記イベント検出部により検出されたイベントに対応するメッセージが、同期型のメッセージ属性である場合には、すべての外部アプリケーションに対して返信要求メッセージを配信するとともに、該返信要求メッセージに対する返信メッセージを待ち受け、該返信メッセージの送信元の外部アプリケーションに対してのみ、前記検出されたイベントに対応するメッセージを送信する
ことを特徴とする請求項２に記載のプログラムシミュレーション装置。
【請求項５】
前記イベント検出部は、
ユーザーにより指定された任意のレジスタへのアクセスまたは該レジスタにおける任意の条件成立をイベントとして検出するレジスタイベント検出部を具備する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項６】
前記イベント検出部は、
ユーザーにより指定された任意のメモリ番地へのアクセスまたは該メモリ番地における任意の条件成立をイベントとして検出するメモリイベント検出部を具備する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項７】
前記イベント検出部は、
ユーザーにより指定された任意のメモリ番地の命令の実行をイベントとして検出する命令実行イベント検出部を具備する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項８】
前記メッセージ定義は、さらに、
前記ターゲットプログラムから前記外部アプリケーションに送信されるべきパラメータデータを含む
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項９】
上記プログラムシミュレーション装置は、さらに、
前記命令実行部により実行される前記ターゲットプログラムの状態を変更する状態変更部を具備する
ことを特徴とする請求項１に記載のプログラムシミュレーション装置。
【請求項１０】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション装置であって、
前記ターゲットプログラムの命令を実行する命令実行部と、
実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持部と、
前記コールバック定義保持部が保持する前記コールバック定義中のイベントと、前記命令実行部により実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出部と、
前記イベント検出部によりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理部とを具備する
ことを特徴とするプログラムシミュレーション装置。
【請求項１１】
前記コールバック定義は、さらに、
前記ターゲットプログラムから前記外部アプリケーションに受け渡されるべきパラメータデータを含む
ことを特徴とする請求項１０に記載のプログラムシミュレーション装置。
【請求項１２】
上記プログラムシミュレーション装置は、さらに、
前記命令実行部により実行される前記ターゲットプログラムの状態を変更する状態変更部を具備する
ことを特徴とする請求項１０に記載のプログラムシミュレーション装置。
【請求項１３】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション方法であって、
前記ターゲットプログラムの命令を実行する命令実行ステップと、
実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持ステップと、
保持される前記メッセージ定義中のイベントと、前記命令実行ステップにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出ステップと、
前記イベント検出ステップによりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信ステップとを含むする
ことを特徴とするプログラムシミュレーション方法。
【請求項１４】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション方法であって、
前記ターゲットプログラムの命令を実行する命令実行ステップと、
実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持ステップと、
保持される前記コールバック定義中のイベントと、前記命令実行ステップにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出ステップと、
前記イベント検出ステップによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理ステップとを含む
ことを特徴とするプログラムシミュレーション方法。
【請求項１５】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させるプログラムであって、
前記ターゲットプログラムの命令を実行する命令実行モジュールと、
実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持モジュールと、
保持される前記メッセージ定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、
前記イベント検出モジュールによりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信モジュールとを含むする
ことを特徴とするプログラム。
【請求項１６】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させるプログラムであって、
前記ターゲットプログラムの命令を実行する命令実行モジュールと、
実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持モジュールと、
保持される前記コールバック定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、
前記イベント検出モジュールによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理モジュールとを含む
ことを特徴とするプログラム。
【請求項１７】
外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させる第１のプログラムと、
前記ターゲットアプリケーションとの相互作用において動作する外部アプリケーション処理をコンピュータに実行させる第２のプログラムとを具備するプログラムシミュレーションプログラムであって、
前記第１のプログラムは、
前記ターゲットプログラムの命令を実行する命令実行モジュールと、
実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持モジュールと、
保持される前記コールバック定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、
前記イベント検出モジュールによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理モジュールとを含み、
前記第２のプログラムは、
前記第１のプログラムの前記コールバック処理モジュールから呼び出された場合の処理動作のみが記述される
ことを特徴とするプログラムシミュレーションプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムシミュレーション装置およびプログラムシミュレーション方法に関する。特に、例えばマイクロコンピュータに組み込まれるソフトウエアシステムの開発におけるデバッグおよび評価の段階において、開発対象のターゲットシステムとは異なるホストパーソナルコンピュータ上で、外部ハードウエアと連携動作する、開発対象のターゲットプログラムの多様な実行環境を提供する技術に関する。
【０００２】
【従来の技術】
一般的に、マイクロコンピュータに組み込まれる組み込みソフトウェアは、単体で動作するものではない。すなわち、この組み込みソフトウエアは、外部からの入力データによってイベント駆動され、組み込みソフトウエアの内部状態が複雑に遷移するものであり、また、組み込みソフトウエア中の開発対象となるプログラム（以下、「ターゲットプログラム」と称する。）からの出力データによって、外部ハードウェアが制御されたり通信が行われることが大きな特徴である。
【０００３】
【発明が解決しようとする課題】
しかしながら、従来のシミュレーション装置には、以下の解決すべき問題点があった。
【０００４】
すなわち、従来の組み込みソフトウエアのシミュレーション装置によれば、ターゲットＣＰＵのみのシミュレーションに限定されることが多いため、デバッガアプリケーションによるデバッグの対象は、ターゲットＣＰＵ上で動作するターゲットプログラムの部分的な論理検証に限られることが多い。特に、シミュレーション装置が、ターゲットプログラムに対するデータ入力手段を備えていない場合には、ターゲットＣＰＵ上で稼働するターゲットプログラムの実行は、データ入力待ち状態に陥り、見かけ上停止したようになる。そのため、ターゲットプログラムの全体の動作検証は、マイコンの周辺回路などの外部ハードウェアの完成を待って、別途エミュレータやデバッグモニタなどを使用して行う必要がある。あるいは、入出力手段をあらかじめ備えたシミュレーション装置であっても、マイコン上の組み込みソフトウエアでで想定される機能動作に必ずしも適合するとは限らない。結局、想定するシステムに適合した入出力手段を備えていない場合には、上記と同様に外部ハードウェアの完成を待たないとターゲットプログラムのデバッグをすることができず、このため、組み込みソフトウエアのデバッグおよび評価を複雑化、長期化させる要因となっていた。
【０００５】
本発明は、上記の技術的課題を解決するためになされたものであって、その目的とするところは、ターゲットＣＰＵの外部ハードウエアを必要とすることなく、ターゲットプログラムに対する多様な入出力データ、入出力タイミングを用いたシミュレーションを実現することのできる、プログラムシミュレーション装置およびプログラムシミュレーション方法を提供することにある。
【０００６】
また、本発明の他の目的は、シミュレーション装置のシミュレーション実行時間を高速化（短縮化）し、ターゲットプログラムの高速なシミュレーションを実現する点にある。
【０００７】
【課題を解決するための手段】
本発明においては、開発対象のターゲットシステムとは異なるホストＰＣ上でターゲットプログラムの実行環境を提供するシミュレーションにおいて、開発対象となるターゲットプログラムのシミュレーション機能と、このターゲットプログラムのシミュレーション機能と連携して動作する外部ハードウエアシミュレーション機能との連携動作を定義する。この連携動作に関する定義に基づいて、外部ハードウエアとターゲットプログラムとの間の多様な入出力データ、入出力タイミングを網羅的にシミュレーションすることができる。
【０００８】
本発明のある特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション装置であって、前記ターゲットプログラムの命令を実行する命令実行部と、実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持部と、前記メッセージ定義保持部が保持する前記メッセージ定義中のイベントと、前記命令実行部により実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出部と、前記イベント検出部によりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信部とを具備することを特徴とするプログラムシミュレーション装置が提供される。
【０００９】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション装置であって、前記ターゲットプログラムの命令を実行する命令実行部と、実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持部と、前記コールバック定義保持部が保持する前記コールバック定義中のイベントと、前記命令実行部により実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出部と、前記イベント検出部によりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理部とを具備することを特徴とするプログラムシミュレーション装置が提供される。
【００１０】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション方法であって、前記ターゲットプログラムの命令を実行する命令実行ステップと、実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持ステップと、保持される前記メッセージ定義中のイベントと、前記命令実行ステップにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出ステップと、前記イベント検出ステップによりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信ステップとを含むすることを特徴とするプログラムシミュレーション方法が提供される。
【００１１】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション方法であって、前記ターゲットプログラムの命令を実行する命令実行ステップと、実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持ステップと、保持される前記コールバック定義中のイベントと、前記命令実行ステップにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出ステップと、前記イベント検出ステップによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理ステップとを含むことを特徴とするプログラムシミュレーション方法が提供される。
【００１２】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させるプログラムであって、前記ターゲットプログラムの命令を実行する命令実行モジュールと、実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持モジュールと、保持される前記メッセージ定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、前記イベント検出モジュールによりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信モジュールとを含むすることを特徴とするプログラムが提供される。
【００１３】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させるプログラムであって、前記ターゲットプログラムの命令を実行する命令実行モジュールと、実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持モジュールと、保持される前記コールバック定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、前記イベント検出モジュールによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理モジュールとを含むことを特徴とするプログラムが提供される。
【００１４】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させる第１のプログラムと、前記ターゲットアプリケーションとの相互作用において動作する外部アプリケーション処理をコンピュータに実行させる第２のプログラムとを具備するプログラムシミュレーションプログラムであって、前記第１のプログラムは、前記ターゲットプログラムの命令を実行する命令実行モジュールと、実行中の前記ターゲットプログラムから前記外部アプリケーションに通知されるべきメッセージと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、メッセージ定義として保持するメッセージ定義保持モジュールと、保持される前記メッセージ定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、前記イベント検出モジュールによりイベント検出の通知を受けて、前記メッセージ定義の記述に基づいて、検出されたイベントに対応するメッセージを、前記外部アプリケーションに直接送信するメッセージ送信モジュールとを含み、前記第２のプログラムは、前記第１のプログラムの前記メッセージ送信モジュールから送信されるメッセージを受信した場合の処理動作のみが記述されることを特徴とするプログラムシミュレーションプログラムが提供される。
【００１５】
本発明の他の特徴によれば、外部アプリケーションとの相互作用において動作する、開発対象であるターゲットプログラムの命令の実行をシミュレーションするプログラムシミュレーション処理をコンピュータに実行させる第１のプログラムと、前記ターゲットアプリケーションとの相互作用において動作する外部アプリケーション処理をコンピュータに実行させる第２のプログラムとを具備するプログラムシミュレーションプログラムであって、前記第１のプログラムは、前記ターゲットプログラムの命令を実行する命令実行モジュールと、実行中の前記ターゲットプログラムの実行と同期して、前記ターゲットプログラムが該ターゲットプログラムの実行と同一プロセス中で呼び出すべき前記外部アプリケーションの処理を記述するコールバックと、前記ターゲットプログラム実行中の状態変化を示すイベントとを対応付け、コールバック定義として保持するコールバック定義保持モジュールと、保持される前記コールバック定義中のイベントと、前記命令実行モジュールにより実行される前記ターゲットプログラムの実行状況とを比較して、前記イベントを検出するイベント検出モジュールと、前記イベント検出モジュールによりイベント検出の通知を受けて、前記コールバック定義の記述に基づいて、検出されたイベントに対応するコールバックを呼び出すコールバック処理モジュールとを含み、前記第２のプログラムは、前記第１のプログラムの前記コールバック処理モジュールから呼び出された場合の処理動作のみが記述されることを特徴とするプログラムシミュレーションプログラムが提供される。
【００１６】
【発明の実施の形態】
＜第１の実施形態＞
以下、図１乃至図９を参照して、本発明の第１の実施形態に係るプログラムシミュレーション装置およびプログラムシミュレーション方法を詳細に説明する。
【００１７】
第１の実施形態は、開発対象のターゲットシステムとは異なるホストパーソナルコンピュータ（以下、「ホストＰＣ」と称する。）において、ターゲットＣＰＵ以外の周辺回路などの外部ハードウエアと、ターゲットプログラムとの連携動作環境を、ホストＰＣ上に構築する機能を提供する。
【００１８】
図１は、本発明の第１の実施形態に係るシミュレーション機能の、ホストＰＣ上での実行のイメージの一例を示す。
【００１９】
図１に示すように、マイクロコンピュータなどに組み込まれるべきターゲットプログラム２０は、第１の実施形態に係るシミュレーション装置１０上で実行される。ターゲットプログラム２０との関係において利用されるべき各種の外部ハードウエアは、ユーザーがそれぞれ作成した複数のアプリケーションプログラム、すなわち仮想デバイスシミュレータ・アプリケーション３０ａ，３０ｂ，３０ｃによって実現される。シミュレーション装置１０上には、ターゲットプログラムと各仮想デバイスシミュレータ・アプリケーション３０ａ，３０ｂ，３０ｃとの間の連携動作が、後述するメッセージあるいはコールバックとして定義される。
【００２０】
図２は、本発明の第１の実施形態に係るシミュレーション装置１０の構成を示すブロック図である。
【００２１】
図２に示すように、第１の実施形態に係るシミュレーション装置１０は、スケジューラ１３０と、命令実行部１４０と、命令実行イベント検出部１５０と、メモリ管理部１６０と、メモリイベント検出部１７０と、レジスタ管理部１８０と、レジスタイベント検出部１９０と、メッセージ登録部２００と、トリガアクション実行部２１０とを具備する。
【００２２】
スケジューラ１３０は、外部のデバッガ４０または仮想デバイスシミュレータ３０（図１における３０ａ，３０ｂ，３０ｃ）からの各種要求に従って、メモリ管理部１６０、命令実行部１４０、レジスタ管理部１８０の呼び出しタイミングを制御する。デバッガ４０からスケジューラ１３０への要求には、たとえばレジスタやメモリへのアクセス要求、ターゲットプログラムの実行制御要求（例えば、ターゲットプログラムの連続実行、所定のステップの実行、実行停止など）、イベント設定要求などがある。スケジューラ１３０は、デバッガ４０からイベント設定要求を受け付けた場合、イベントの設定対象がメモリか、レジスタか、あるいは命令実行であるかのいずれかに応じて、対応する機能であるメモリ管理部１３０，命令実行部１４０，レジスタ管理部１８０のいずれかにイベント成立条件を通知する。
【００２３】
なお、デバッガ４０は、シミュレーション装置１０を介したデバッグ機能を実現するアプリケーションプログラムであって、ホストＰＣの内部あるいは外部のいずれにあってもよい。デバッガ４０は、プログラマなどのユーザーからの入出力装置を介した要求を受け付け、デバッグにおけるブレークポイントの設定やターゲットプログラムの実行制御、メモリやレジスタなどの各種のＣＰＵリソースに対する読み出しおよび書込、およびユーザーからの要求に従ったイベントの予約を、第１の実施形態に係るシミュレーション装置１０に対して行う。
【００２４】
また、仮想デバイスシミュレータ３０は、ターゲットプログラムと関連する外部ハードウエアをシミュレートするアプリケーションであって、ホストＰＣの内部あるいは外部のいずれにあってもよいが、第１の実施形態においては、シミュレーション装置１０の外部で稼働するのが好ましい。仮想デバイスシミュレータ３０は、第１の実施形態に係るシミュレーション装置１０内のトリガアクション実行部２１０から通知されたメッセージを受信する。また、仮想デバイスシミュレータ３０は、スケジューラ１３０に対してメモリやレジスタなどの各種ＣＰＵリソースに対する読み出し、書込、および割り込みの要求（クリア要求）を、スケジューラ１３０に対して通知する。
【００２５】
命令実行部１４０は、ターゲットプログラムに記述された命令列をシミュレーション実行する。命令実行部１４０は、また、スケジューラ１３０からのイベントの予約を受け付け、メッセージ登録部２００および命令実行イベント検出部１５０へ通知する。さらに、シミュレーション対象のターゲットプログラムに記述された命令を解析し、この命令に応じてメモリ管理部１６０またはレジスタ管理部１８０を呼び出す。スケジューラ１３０により予約されたイベントが存在する場合には、命令実行イベント検出部１５０へ、イベントの存在を通知する。
【００２６】
命令実行イベント検出部１５０は、命令実行部１４０を介して通知される、予約されたイベントの成立条件を保持し、命令実行部１４０からイベントの存在についての通知を受けた場合、メッセージ登録部２００により保持される予約されたイベントと現在のターゲットプログラムの実行状況とを比較する。そして、命令実行イベント検出部１５０は、イベントの成立を検出すると、このイベント成立を、トリガアクション実行部２１０へ通知する。
【００２７】
メモリ管理部１６０は、命令実行部１４０からの、メモリに対する読み出し、書込要求を受け付ける。またメモリ管理部１６０は、スケジューラ１３０からのイベントの予約を受け付け、メッセージ登録部２００およびメモリイベント検出部１７０へ通知する。スケジューラ１３０により予約されたイベントが存在する場合、メモリ管理部１６０は、メモリイベント検出部１７０へ、イベントの存在を通知する。
【００２８】
メモリイベント検出部１７０は、メモリ管理部１６０を介して通知される、予約されたイベントの成立条件を保持し、メモリ管理部１６０からイベントの存在についての通知を受けた場合、メッセージ登録部２００により保持される予約されたイベントと現在のプログラムの実行状況とを比較する。そして、メモリイベント検出部１７０は、イベントの成立を検出すると、このイベント成立を、トリガアクション実行部２１０へ通知する。
【００２９】
レジスタ管理部１８０は、命令実行部１４０からの、レジスタに対する読み出し、書込要求を受け付ける。またレジスタ管理部１８０は、スケジューラ１３０からのイベントの予約を受け付け、メッセージ登録部２００およびレジスタイベント検出部１９０へ通知する。スケジューラ１３０により予約されたイベントが存在する場合、レジスタ管理部１８０は、レジスタイベント検出部１９０へ、イベントの存在を通知する。
【００３０】
レジスタイベント検出部１９０は、レジスタ管理部１８０を介して通知される、予約されたイベントの成立条件を保持し、レジスタ管理部１８０からイベントの存在についての通知を受けた場合、メッセージ登録部２００により保持される予約されたイベントと現在のプログラムの実行状況とを比較する。そして、レジスタイベント検出部１９０は、イベントの成立を検出すると、このイベント成立を、トリガアクション実行部２１０へ通知する。
【００３１】
メッセージ登録部２００は、ユーザーからの入出力装置を介した入力または事前定義に基づいて、第１の実施形態に係るターゲットプログラム２０と、仮想デバイスシミュレータプログラム３０との間の連携動作を規定するメッセージを、シミュレーション装置１０に対して登録する。このメッセージには、実行中のターゲットプログラム２０から外部デバイスシミュレータ３０に通知されるべきメッセージと、ターゲットプログラム２０実行中の状態変化を示すイベントとの対応付けが定義される。
【００３２】
トリガアクション実行部２１０は、命令実行イベント検出部１５０、メモリイベント検出部１７０、レジスタイベント検出部１９０からの通知を受け取ると、メッセージ登録部２００により予め定義されたメッセージまたはコールバックの後述する定義内容に基づいて、コールバックの呼び出しや、仮想デバイスシミュレータ３０に対する同期／非同期メッセージの送信を実行する。
【００３３】
次に、第１の実施形態における、ターゲットプログラム２０と、仮想デバイスシミュレータプログラム３０との間の連携動作の定義の一例を説明する。
【００３４】
（１）メッセージの定義
まず、第１の実施形態に係るシミュレーション装置１０に対して、ホストＰＣ上でシステムに一意のメッセージ名を定義する。メッセージの種類には、次のような２つの形式がある。
【００３５】
・同期メッセージ
・非同期メッセージ
（２）パラメータの選択
メッセージに付与するパラメータを選択する。付与可能なパラメータとしては、以下のものがあり、付与可能なデータサイズが限られている場合には、その組み合わせを自由にカスタマイズすることができる。
【００３６】
・時間
・プログラムカウンタ（ＰＣ）
・アドレス
・データの内容
・その他ＣＰＵまたはターゲットプログラムの内部情報
（３）コールバックの登録
コールバックを登録する。コールバックとは、ターゲットプログラムの実行と同期して、シミュレータから呼び出されるべき、ユーザーアプリケーション（仮想デバイスシミュレータ・アプリケーション）の処理を記述した関数をいう。具体的には、イベント成立時に、シミュレーション装置１０によって呼び出されるべき関数のアドレスを登録する。このコールバックは、その性質上、そのシミュレーション実行時の処理シーケンスは同期メッセージに類似し、ターゲットプログラムの実行と同期して動作する。ただし、同期メッセージが、異なるプロセス間での同期を保証するのに対して、コールバックでは、ターゲットプログラムのシミュレーション実行と同一プロセスで処理される点において相違する。コールバックの登録の際に、コールバックに渡すべきパラメータの種類も、上記（２）と同様、指定することができる。
【００３７】
（４）イベントの定義
メッセージの送信や、コールバックを呼び出すべきタイミングを、イベントとして定義し、すでに定義したメッセージまたはコールバックと関連づける。このタイミングは、ターゲットプログラムの状態の変化によって決定される。このターゲットプログラムの状態の変化には、例えば次のようなものがある。
【００３８】
・ユーザーが指定した任意レジスタへのアクセス（Ｒｅａｄ／Ｗｒｉｔｅ／ＡＬＬ）
・ユーザーが指定した任意レジスタが、任意の条件を満たしたとき
・ユーザーが指定した任意メモリ番地へのアクセスＲｅａｄ／Ｗｒｉｔｅ／ＡＬＬ）
・ユーザーが指定した任意メモリ番地が、任意の条件を満たしたとき
・ユーザーが指定した任意割り込み／例外の発生
・ユーザーが指定した任意メモリ番地の命令の実行
・その他ターゲットプログラムの状態の変化
なお、第１の実施形態に係るシミュレーション装置１０は、仮想デバイスシミュレータ・アプリケーション３０がシミュレートする外部ハードウエアからの要求に従って、次のようなインターフェース機能を備える。
【００３９】
・メッセージ／コールバックの定義情報を含む共有情報へのアクセスを行うための同期機能
・ユーザーが指定した任意レジスタへのアクセス機能（Ｒｅａｄ／Ｗｒｉｔｅ）・ユーザーが指定した任意メモリ番地へのアクセス機能（Ｒｅａｄ／Ｗｒｉｔｅ）
・ユーザーが指定した任意ポートへのアクセス機能（Ｒｅａｄ／Ｗｒｉｔｅ）
・ユーザーが指定した任意割り込み／例外の発生要求機能
・ユーザーが指定したコールバック登録機能
・その他ＣＰＵまたはターゲットプログラムの内部情報取得機能
次に、図３乃至図６を参照して、第１の実施形態に係るシミュレーション装置１０における各アプリケーションプログラムのロードから実行時情報の展開までの処理手順を順に説明する。
【００４０】
なお、図３は、第１の実施形態におけるホストＰＣ上でのシミュレーション実行環境の一例を示す。図３に示すように、第１の実施形態に係るシミュレーション装置１０と、外部ハードウエアをシミュレートする仮想デバイスアプリケーション３０ａ，３０ｂ，３０ｃとの間の入出力データの交換は、シミュレーション装置１０において外部定義される。
（１）デバッガアプリケーション（図３におけるデバッガアプリケーション４０）の初期化処理
図４は、デバッガアプリケーション４０の初期化処理の処理手順を示すフローチャートである。
【００４１】
図４に示すように、ユーザーの実行制御によって（図３のステップＳ２１）、デバッガアプリケーション４０の初期化処理が開始されると（図４のステップＳ４１）、まず、命令セットシミュレータＤＬＬ（Ｄｙｎａｍｉｃ　Ｌｉｎｋ　Ｌｉｂｒａｒｙ：図３における命令セットシミュレータＤＬＬ１１０）がデバッガアプリケーション４０内にロードされる（ステップＳ４３）。すなわち、命令セットシミュレータＤＬＬが、デバッガアプリケーション４０と同一アドレス空間にマッピングされる（図３におけるステップＳ２３）。
【００４２】
次に、命令セットシミュレータの初期化処理が実行される（図４におけるステップＳ４５。ステップＳ４５の処理の詳細は図５を参照して後述する。）。具体的には、命令セットシミュレータの内部データの初期化と、システムシミュレーションのための仮想デバイスシミュレータＤＬＬのロードが実行される（図３のステップＳ２５）。
【００４３】
次に、シミュレーションすべきターゲットプログラムが、デバッガアプリケーション４０内にロードされる（ステップＳ４７）。
【００４４】
イベントが成立したときに、仮想デバイスシミュレータ・アプリケーションに送信するべきメッセージを、命令セットシミュレータとホストＰＣのオペレーティングシステムに登録する（ステップＳ４９）。
【００４５】
また、仮想デバイスシミュレータ・アプリケーションに対してメッセージを送信すべきタイミングを、イベント成立条件として、命令セットシミュレータに登録する（ステップＳ５１）。以上で、デバッガアプリケーション４０の初期化処理が終了する（ステップＳ５３）。
【００４６】
（２）命令セットシミュレータの初期化処理
図５は、図４のステップＳ４５における、命令セットシミュレータの初期化処理の詳細の処理手順を示すフローチャートである。
【００４７】
図５に示すように、命令セットシミュレータの初期化処理が開始されると（図５のステップＳ４５１）、まず、仮想デバイスシミュレータＤＬＬ（図３における仮想デバイスシミュレータＤＬＬ１２０）が検出され、外部ハードウエアをシミュレートする仮想デバイスシミュレータＤＬＬが存在すれば（ステップＳ４５３Ｙ）、命令セットシミュレータにロードされ（ステップＳ４５５）、存在しなければ（ステップＳ４５３Ｎ）何もしないで終了する（ステップＳ４５９）。外部ハードウエアをシミュレートする仮想デバイスシミュレータＤＬＬが存在する場合には、デバッガアプリケーション４０と同一アドレス空間にマッピングされる。
【００４８】
次に、仮想デバイスシミュレータＤＬＬが初期化される（ステップＳ４５７）。この初期化においては、主に、内部データの初期化と、仮想デバイスシミュレータＤＬＬへ制御を移すための、コールバックの登録が実行される。以上で、命令セットシミュレータの初期化処理が終了する（ステップＳ４５９）。
【００４９】
（３）仮想デバイスシミュレータＤＬＬの初期化処理
図６は、図５のステップＳ４５７における、仮想デバイスシミュレータＤＬＬの初期化処理の詳細の処理手順を示すフローチャートである。
【００５０】
図６に示すように、仮想デバイスシミュレータＤＬＬの初期化処理が開始されると（図６のステップＳ４５７１）、コールバックが登録される（ステップＳ４５７３）。すなわち、コールバックを呼び出すべきタイミング情報とともに、コールバック関数のアドレスが、命令セットシミュレータに登録される。以上で、仮想デバイスシミュレータＤＬＬの初期化処理が終了する（ステップＳ４５７５）。
【００５１】
（４）仮想デバイスシミュレータアプリケーションの初期化処理
図７は、仮想デバイスシミュレータアプリケーション側における初期化処理の処理手順を示すフローチャートである。
【００５２】
図７に示すように、仮想デバイスシミュレータアプリケーションの初期化処理が開始されると（Ｓ７１）、まず、命令セットシミュレータＤＬＬが、仮想デバイスシミュレータアプリケーションにロードされる（ステップＳ７３）。デバッガアプリケーションがロードしたものと同一の命令セットシミュレータＤＬＬを、仮想デバイスシミュレータアプリケーションにロードすることによって、データの共有を図ることができる（図３のステップＳ２７）。
【００５３】
次に、仮想デバイスシミュレータアプリケーションは、命令セットシミュレータが外部に提供しているシミュレータＡＰＩのアドレスを予め取得する（ステップＳ７５）。
【００５４】
また、命令セットシミュレータから受信するべきメッセージ情報を、仮想デバイスシミュレータアプリケーションが稼働するオペレーティングシステムへ登録する（ステップＳ７７）。このメッセージ情報は、オペレーティングシステムを介して、命令セットシミュレータから仮想デバイスシミュレータアプリケーションへ通知される。以上で、仮想デバイスシミュレータアプリケーション側の初期化処理が終了する（ステップＳ７９）。
【００５５】
次に、第１の実施形態に係るシミュレーション装置１０における、ターゲットプログラムのシミュレーション実行時の処理を説明する。
【００５６】
図８は、デバッガアプリケーションからのターゲットプログラムの連続実行要求をスケジューラ１３０が受け、命令実行部１４０を呼び出した後のターゲットプログラムのシミュレーション実行時の処理手順を示すフローチャートである。
【００５７】
図８に示すように、ターゲットプログラムのシミュレーションが開始されると（ステップＳ８０１）、命令実行部１４０は、メモリ管理部１６０を呼び出し、メモリ管理部１６０に実行アドレスとフェッチデータ格納先を渡す。メモリ管理部１６０は、実行アドレスの指すメモリの内容を、フェッチデータ格納先へコピーすることによって、ターゲットプログラムの命令がフェッチされる（ステップＳ８０３）。
【００５８】
次に、命令実行イベントが検出されたか否かが判断され（ステップＳ８０５）、命令実行イベントが検出されなければ（ステップＳ８０５Ｎ）、フェッチデータを取得した命令実行部１４０は、命令をデコードする（ステップＳ８０９）。
【００５９】
次に、デコードされた命令が実行される（ステップＳ８１１）。命令実行部１４０は、命令実行イベント成立条件が満たされたか否かを評価するために、命令実行イベント検出部１５０を呼び出す（ステップＳ８０５に戻る）。
【００６０】
命令実行イベント検出部１５０は、イベント成立条件を評価し、イベントが成立した場合（ステップＳ８０５Ｙ）、トリガアクション実行部２１０を呼び出す。
【００６１】
一方、命令実行部１４０は、ターゲットプログラムの命令に従い、メモリからのデータの読み出し、メモリへのデータの書き出しを行うため、メモリ管理部１６０を呼び出す。メモリ管理部１６０は、メモリへのリード要求、ライト要求を処理後（ステップＳ８１３）、メモリイベント成立条件を評価するために、メモリイベント検出部１７０を呼び出す。
【００６２】
メモリイベント検出部１７０は、イベント成立条件を評価することにより、メモリイベントを検出し（ステップＳ８１５）、イベントが成立した場合（ステップＳ８１５Ｙ）、トリガアクション実行部２１０を呼び出す。
【００６３】
一方、命令実行部１４０は、演算結果をレジスタへ格納するために、レジスタ管理部１８０を呼び出す。レジスタ管理部１８０は、演算結果をレジスタに格納後（ステップＳ８１９）、イベント成立条件を評価するために、レジスタイベント検出部１９０を呼び出す。
【００６４】
レジスタイベント検出部１９０は、レジスタイベント成立条件を評価することにより、レジスタイベントを検出し（ステップ８２１）、イベントが成立した場合（ステップＳ８２１Ｙ）、トリガアクション実行部２１０を呼び出す。
【００６５】
ステップＳ８０５Ｙ、ステップＳ８１５Ｙ、ステップＳ８２１Ｙの場合にそれぞれ各イベント検出部１５０，１７０，１９０から呼び出されるトリガアクション実行部２１０は、成立したイベントに対応したトリガアクション動作を実行する（それぞれ、ステップＳ８０７，ステップＳ８１７、ステップＳ８２３）。このトリガアクション動作の実行には、コールバック関数の呼び出しや、同期／非同期メッセージの送信が含まれる。
【００６６】
最後に、デバッガアプリケーション上に設定されたブレークポイントでの停止や、デバッガアプリケーションに入力された停止要求によって、シミュレーション終了が検出される（ステップＳ８２５）。シミュレーション終了が検出されると、ターゲットプログラムのシミュレーション実行が停止される（ステップＳ８２７）。
【００６７】
次に、第１の実施形態に係るシミュレーション装置１０における、ターゲットプログラムと、外部ハードウエアをシミュレートする仮想デバイスシミュレータアプリケーションとの間での非同期シリアル通信の一例を説明する。
【００６８】
図９は、ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーション（仮想デバイスシミュレータアプリケーション３０）とが非同期に連携動作するシーケンスの一例を示す。
【００６９】
まず、事前定義につき説明する。
【００７０】
ユーザーは、あらかじめ、シリアル出力バッファＳＣ０ＢＵＦへの書込をイベントとして捉え、書き込んだ時刻、書き込んだデータとともに、非同期メッセージを仮想デバイスシミュレータアプリケーション３０に送信するように動作を定義し、命令セットシミュレータに登録しておく。
【００７１】
ターゲットプログラムは、命令セットシミュレータ上で実行され、シリアルバッファＳＣ０ＢＵＦに例えばデータ”ａ”を書き込む。ＳＣ０ＢＵＦに書き込まれたデータ”ａ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ９１）。その際、命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータへ、データ”ａ”とともに非同期メッセージを送信する（ステップＳ９２）。非同期メッセージのパラメータとしてデータ”ａ”を受信した仮想デバイスシミュレータ３０は、例えばデータ”ａ”を画面等の入出力媒体に表示する（ステップＳ９４）。一方、非同期メッセージの送信直後から、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ９３）。
【００７２】
次に、ターゲットプログラムがＳＣ０ＢＵＦにデータ”ｂ”を書き込んだときも同様の手順で、ＳＣ０ＢＵＦに書き込まれたデータ”ｂ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ９５）。命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータへ、データ”ｂ”とともに非同期メッセージを送信する（ステップＳ９６）。非同期メッセージのパラメータとしてデータ”ｂ”を受信した仮想デバイスシミュレータ３０は、例えばデータ”ｂ”を画面等の入出力媒体に表示する（ステップＳ９８）。一方、非同期メッセージの送信直後から、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ９７）。上記が、ターゲットプログラムと仮想デバイスシミュレータとが非同期に協調動作する一例である。
【００７３】
以上、第１の実施形態においては、ターゲットプログラムの実行時に、上記したターゲットプログラムの状態変化の発生を、イベントの登録および通知によって、第１の実施形態に係るシミュレーション装置１０が検出する。トリガアクション実行部２１０は、イベントに関連づけられたメッセージまたはコールバックの定義を参照することにより、発生したイベントに対応するメッセージが、ホストＰＣ上の他の仮想デバイスシミュレータアプリケーションに対して送信される。あるいは、仮想デバイスシミュレータアプリケーションのコールバック（関数）が呼び出される。なお、仮想デバイスシミュレータアプリケーションに送信されるメッセージは、不特定多数の他のアプリケーションで受信可能なものとする。
【００７４】
第１の実施形態によれば、以下の効果が得られる。
【００７５】
すなわち、外部ハードウエアの多様な機能、特に入出力機能を、異なる仮想デバイスシミュレータアプリケーションによって実現する。シミュレーション装置１０上に登録されたイベントとメッセージの定義内容に基づいて、非同期メッセージが、複数の仮想デバイスシミュレータアプリケーションにブロードキャスト（同報送信）されるため、デバッグアプリケーションの制御の下でターゲットプログラムの命令を実行するシミュレーション装置１０側には、それぞれの仮想デバイスシミュレータアプリケーションに関する情報を定義しておくことが不要となる。
【００７６】
したがって、ターゲットプログラムのシミュレーションを行うアプリケーションと、外部ハードウエアをシミュレートする複数の異なるアプリケーションによって、ターゲットプログラムと外部ハードウエアとの連携動作を実現するシミュレーション環境を、ホストＰＣ上で構築することが可能となる。
【００７７】
さらに、第１の実施形態においては、メッセージの属性を非同期に設定しているため、外部ハードウエアをシミュレートする仮想デバイスシミュレータアプリケーション側での処理の終了を待つことなく、ターゲットプログラムの次の命令の実行を再開することができる。したがって、シミュレーション実行時間を高速化することができ、高速かつ効率のよいターゲットプログラムのシミュレーションを実行することが可能となる。
【００７８】
＜第２の実施形態＞
次に、図１０および図１１を参照して、本発明の第２の実施形態に係るプログラムシミュレーション装置およびプログラムシミュレーション方法を、第１の実施形態と異なる点についてのみ説明する。
【００７９】
第２の実施形態は、第１の実施形態と比較して、ターゲットプログラム２０とと仮想デバイスシミュレータ３０とが、同期シリアル通信により連携動作する点において相違する。
【００８０】
第２の実施形態に係るシミュレーション装置１０の構成は、図２に示した第１の実施形態のシミュレーション装置１０と同様であり、第２の実施形態に係るホストＰＣ上における各モジュールの初期化処理は図４乃至図７にそれぞれ示した第１の実施形態の場合と同様であり、第２の実施形態に係るシミュレーション装置１０のシミュレーション実行時の制御処理は図８に示した第１の実施形態のシミュレーション装置１０の場合と同様であるため、その説明は省略する。
【００８１】
第２の実施形態においては、シミュレーション装置１０に対するメッセージの登録において、メッセージ属性を”同期”と設定する。
【００８２】
次に、第２の実施形態に係るシミュレーション装置１０における、ターゲットプログラムと、外部ハードウエアをシミュレートする仮想デバイスシミュレータアプリケーションとの間での同期シリアル通信の一例を説明する。
【００８３】
図１０は、ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーション（仮想デバイスシミュレータアプリケーション３０）とがメッセージの送受信を利用して同期的に連携動作するシーケンスの一例を示す。
【００８４】
まず、事前定義につき説明する。
【００８５】
ユーザーは、あらかじめ、シリアル出力バッファＳＣ０ＢＵＦへの書込をイベントとして捉え、書き込んだ時刻、書き込んだメモリアドレスとともに、同期メッセージを仮想デバイスシミュレータアプリケーション３０に送信するように動作を定義し、命令セットシミュレータに登録しておく。
【００８６】
まず、命令セットシミュレータ（図１０中のシミュレータ１０）は、ターゲットプログラム２０の実行前に、不特定多数の仮想デバイスシミュレーションプログラム３０に向けて、リクエストメッセージを配信する（ステップＳ１０１）。リクエストメッセージを受信した仮想デバイスシミュレーションプログラム３０のうち、１つまたは複数の仮想デバイスシミュレータプログラム３０から、リクエストメッセージに呼応するアクノリッジメッセージが、命令セットシミュレータ１０に対して返信される（ステップＳ１０２）。ステップＳ１０１およびステップＳ１０２により、その後のターゲットプログラムのシミュレーション実行中において、命令セットシミュレータが同期メッセージを送信すべき送信先の仮想デバイスシミュレーションプログラム３０を特定することができる。命令セットシミュレータ１０は、リクエストメッセージの配信後、所定時間内、仮想デバイスシミュレータアプリケーション３０からのアクノリッジメッセージおよび同期メッセージ送信先のアプリケーションを特定するための情報の返信を待つ。命令セットシミュレータとの同期通信を必要とする仮想デバイスシミュレータ３０は、所定時間内にアクノリッジメッセージの返信と同時に自身を特定するための情報（ハンドル）を返信する。
【００８７】
ターゲットプログラム２０は、命令セットシミュレータ上で実行され、シリアルバッファＳＣ０ＢＵＦに例えばデータ”ａ”を書き込む。ＳＣ０ＢＵＦに書き込まれたデータ”ａ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ１０３）。その際、命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータアプリケーションへ、アドレスとともに同期メッセージを送信する（ステップＳ１０４）。命令セットシミュレータは、同期メッセージの送信直後には、ターゲットプログラムのシミュレーション実行を再開しない。同期メッセージを受信した仮想デバイスシミュレータアプリケーション３０は、通知されたアドレスに書き込まれたデータ内容を、シミュレータＡＰＩ（図１０においてはＲｅａｄＭｅｍｏｒｙ）を通じて取得する（ステップＳ１０５，ステップＳ１０６）。取得されたデータ内容”ａ”は、入出力装置に表示される（ステップＳ１０７）。仮想デバイスシミュレータアプリケーション３０での表示の更新が終了した直後に（ステップＳ１０８）、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ１０９）。
【００８８】
次に、ターゲットプログラムがＳＣ０ＢＵＦにデータ”ｂ”を書き込んだときも同様の手順で、ＳＣ０ＢＵＦに書き込まれたデータ”ｂ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ１１０）。命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータへ、アドレスとともに同期メッセージを送信する（ステップＳ１１１）。命令セットシミュレータは、同期メッセージの送信直後には、ターゲットプログラムの実行を再開しない。同期メッセージを受信した仮想デバイスシミュレータアプリケーション３０は、通知されたアドレスに書き込まれたデータ内容を、シミュレータＡＰＩ（図１０においてはＲｅａｄＭｅｍｏｒｙ）を通じて取得する（ステップＳ１１２，ステップＳ１１３）。取得されたデータ内容”ｂ”は、入出力装置に表示される（ステップＳ１１４）。仮想デバイスシミュレータアプリケーション３０での表示の更新が終了した直後に（ステップＳ１１５）、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ１１６）。上記が、ターゲットプログラムと仮想デバイスシミュレータとが同期的に協調動作する一例である。
【００８９】
第２の実施形態によれば、上記のように、組み込みソフトウエアの機能に応じて、ターゲットプログラム２０と、外部ハードウエアをシミュレートする仮想デバイスシミュレータプログラム３０との間での同期処理が必要となる場合であっても、命令セットシミュレータに定義されるメッセージの属性を”非同期”から”同期”に変更するだけで足りるため、デバッグ処理の処理効率が向上する。
【００９０】
次に、第２の実施形態における変形例を説明する。
【００９１】
図１１は、ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーション（仮想デバイスシミュレータアプリケーション３０）とがコールバックを利用して同期的に連携動作するシーケンスの一例を示す。
【００９２】
まず、事前定義につき説明する。
【００９３】
ユーザーは、あらかじめ、シリアル出力バッファＳＣ０ＢＵＦへの書込をイベントとして捉え、書き込んだ時刻、書き込んだメモリアドレスとともに、命令セットシミュレータが呼び出すべき仮想デバイスシミュレータプログラム３０の処理を記述したコールバック（関数）のアドレスを、図５および図６に示す命令セットシミュレータの初期化処理において、命令セットシミュレータに登録しておく（ステップＳ１２１，ステップＳ１２２）。
【００９４】
ターゲットプログラム２０は、命令セットシミュレータ上で実行され、シリアルバッファＳＣ０ＢＵＦに例えばデータ”ａ”を書き込む。ＳＣ０ＢＵＦに書き込まれたデータ”ａ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ１２３）。その際、命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータアプリケーションへ、アドレスとともに同期メッセージを送信する（ステップＳ１２４）。命令セットシミュレータは、同期メッセージの送信直後には、ターゲットプログラムのシミュレーション実行を再開しない。同期メッセージを受信した仮想デバイスシミュレータアプリケーション３０は、通知されたアドレスに書き込まれたデータ内容を、シミュレータＡＰＩ（図１１においてはＲｅａｄＭｅｍｏｒｙ）を通じて取得する（ステップＳ１２５，ステップＳ１２６）。取得されたデータ内容”ａ”は、入出力装置に表示される（ステップＳ１２７）。仮想デバイスシミュレータアプリケーション３０での表示の更新が終了した直後に（ステップＳ１２８）、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ１２９）。
【００９５】
次に、ターゲットプログラムがＳＣ０ＢＵＦにデータ”ｂ”を書き込んだときも同様の手順で、ＳＣ０ＢＵＦに書き込まれたデータ”ｂ”は、命令セットシミュレータでストア命令として解釈され、実行される（ステップＳ１３０）。命令セットシミュレータは、ＳＣ０ＢＵＦへの書込をイベントとして捉え、仮想デバイスシミュレータへ、アドレスとともに同期メッセージを送信する（ステップＳ１３１）。命令セットシミュレータは、同期メッセージの送信直後には、ターゲットプログラムの実行を再開しない。同期メッセージを受信した仮想デバイスシミュレータアプリケーション３０は、通知されたアドレスに書き込まれたデータ内容を、シミュレータＡＰＩ（図１１においてはＲｅａｄＭｅｍｏｒｙ）を通じて取得する（ステップＳ１３２，ステップＳ１３３）。取得されたデータ内容”ｂ”は、入出力装置に表示される（ステップＳ１３４）。仮想デバイスシミュレータアプリケーション３０での表示の更新が終了した直後に（ステップＳ１３５）、命令セットシミュレータは、ターゲットプログラムのシミュレーション実行を再開する（ステップＳ１３６）。上記が、ターゲットプログラムと仮想デバイスシミュレータとが、コールバックを利用して同期的に協調動作する一例である。
【００９６】
第２の実施形態の上記変形例によれば、ターゲットプログラム２０と仮想デバイスシミュレータ３０との間の同期通信を、命令セットシミュレータ上に、任意の仮想デバイスシミュレータプログラムのアドレスをコールバックとして登録することにより実現することができる。このため、同期メッセージにより異なるプロセス間での同期が実現されるのに対して、ターゲットプログラムのシミュレーション実行と同一プロセスで、外部ハードウエアをシミュレートする仮想デバイスシミュレータアプリケーションを起動、実行することができるため、異なるアプリケーション間での同期処理が不要となり、より高速な連携シミュレーションが可能となる。また、図１０に示す同期メッセージによる同期シリアル通信の例と比較して、ターゲットプログラム実行前のリクエスト配信およびアクノリッジ受信の処理がシミュレーション実行時において不要となるため、シミュレーション実行時間を高速化（短縮化）することができる。
【００９７】
図１２は、本発明の各実施形態に係るプログラムシミュレーション装置およびプログラムシミュレーションシステムのハードウエア構成を示すブロック図である。
【００９８】
本発明の各実施形態に係るプログラムシミュレーション装置１０は、例えば、図１２に示される構成を有する。すなわち、本発明の各実施形態に係るプログラムシミュレーション装置１０は、ターゲットプログラムのデバッグおよび評価処理を実行する１つまたは複数のコンピュータシステム内に、プログラムシミュレーション処理の各要素を内蔵することにより構成される。
【００９９】
図１２に示すように、コンピュータシステムは、マイクロプロセッサのような中央演算処理装置１１０ｂおよびシステムバス１１２を介して相互に接続される他の多くのユニットからなる。このコンピュータシステムは、ランダムアクセスメモリ１１４と、リードオンリーメモリ１１６と、ハードディスク装置１２０ｂなどのような周辺装置をシステムバス１１２に接続するＩ／Ｏアダプタ１１８と、キーボード１２４，マウス１２６，スピーカ１２８、マイク１３２あるいはタッチスクリーン（図示せず）等のユーザーインターフェース装置をシステムバス１１２に接続するユーザーインターフェースアダプタ１２２と、通信ネットワークへこのコンピュータシステムを接続する通信アダプタ１３４と、表示装置１３８をシステムバス１１２に接続するディスプレーアダプタ１３６と、フレキシブルディスク１１４，光ディスク１４６および各種メモリカード１４８をそれぞれ駆動する外部ディスクドライバー１４２とを具備する。
【０１００】
これらフレキシブルディスク１１４，光ディスク１４６および各種メモリカード１４８などに代表されるコンピュータ読み取り可能な各種の記憶媒体に、本実施形態に係るプログラムシミュレーション処理の各機能を実行するためのプログラムシミュレーションプログラムを格納し、外部ディスクドライバーを介してこれらの記憶媒体からの所定の読み出し操作を行うことにより、これらの記憶媒体に格納された本実施形態に係るプログラムシミュレーション処理の各機能を実行するためのプログラムシミュレーションプログラムをコンピュータシステム内にインストールすることができる。これらのプログラムをランダムアクセスメモリ１１４にロードし、中央演算処理装置１１０ｂで実行することにより、本実施形態に係るプログラムシミュレーション処理が実現される。なお、上記プログラムシミュレーションプログラムは、１つのコンピュータ上で実行されてもよく、複数のネットワーク接続されたコンピュータ上で実行されてもよい。複数のコンピュータ上で実行される場合には、それぞれのコンピュータ上で稼働するモジュールが、これを記憶する記憶媒体によりそれぞれのコンピュータにロードされる。
【０１０１】
以上のとおり、上記各実施形態によれば、デバッグおよび評価の対象となるターゲットシステムを構成する、ターゲットＣＰＵおよび周辺回路等の外部ハードウエアなどの各構成要素間でのデータの送受信のタイミングや、送受信されるデータの構成を、メッセージまたはコールバックとして自由に定義し、命令セットシミュレータに動的に登録することができる。したがって、存在しない架空のデバイスや、新たなデバイスを想定したシミュレーション環境を、命令セットシミュレータをリコンパイルすることなく、容易に実現することができる。
【０１０２】
また、多様な抽象レベルの仮想的デバイスを自由に定義できる柔軟性があるため、開発対象である上位アプリケーションだけでなく、一度作成した仮想デバイスシミュレータアプリケーションの再利用性を高めることができる。すなわち、上位アプリケーションと仮想デバイスシミュレータアプリケーションの抽象度を高めることによって、ターゲットシステムにおけるデバイスドライバの交換だけで、新規デバイスへの対応やデバイスの仕様変更に柔軟に対応することができる。
【０１０３】
さらに、ターゲットプログラムと、外部の複数のユーザープログラムとの間で送受信されるメッセージの属性として、”非同期”または”同期”のタイプを設けたことによって、非同期のメッセージ属性とした場合には、ターゲットプログラムの高速シミュレーションが可能となり、他方、必要に応じて、ターゲットプログラムと外部の複数のユーザープログラムとの同期を保証した連携シミュレーションも可能となる。
【０１０４】
上記各実施形態においては、メッセージ駆動型の連携動作機構を備えるので、ユーザーが作成する仮想デバイスシミュレータアプリケーション側では、メッセージ受信時の処理動作を記述するだけで足りるため、構造が簡単にできる。また、仮想デバイスシミュレータアプリケーションは、オペレーティングシステムを介して、メッセージ受信時のみ起動されていれば足りるため、ターゲットシステムのデバッグおよび評価を実行するホストＰＣの無駄なＣＰＵ資源が消費されることがない。
【０１０５】
【発明の効果】
本発明によれば、ターゲットＣＰＵの外部ハードウエアを必要とすることなく、ターゲットプログラムに対する多様な入出力データ、入出力タイミングを用いたシミュレーションを実現することのできる、プログラムシミュレーション装置およびプログラムシミュレーション方法が提供される。
【０１０６】
また、シミュレーション装置のシミュレーション実行時間を高速化することができ、ターゲットプログラムの高速なシミュレーションが実現される。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るシミュレーション機能の、ホストＰＣ上での実行のイメージの一例を示す概念図である。
【図２】本発明の第１の実施形態に係るシミュレーション装置１０の構成を示すブロック図である。
【図３】第１の実施形態におけるホストＰＣ上でのシミュレーション実行環境の一例を示すブロック図である。
【図４】デバッガアプリケーション４０の初期化処理の処理手順を示すフローチャートである。
【図５】図４のステップＳ４５における、命令セットシミュレータの初期化処理の詳細の処理手順を示すフローチャートである。
【図６】図５のステップＳ４５７における、仮想デバイスシミュレータＤＬＬの初期化処理の詳細の処理手順を示すフローチャートである。
【図７】仮想デバイスシミュレータアプリケーション側における初期化処理の処理手順を示すフローチャートである。
【図８】デバッガアプリケーションからのターゲットプログラムの連続実行要求をスケジューラ１３０が受け、命令実行部１４０を呼び出した後のターゲットプログラムのシミュレーション実行時の処理手順を示すフローチャートである。
【図９】ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーションとが非同期に連携動作するシーケンスの一例を示す図である。
【図１０】ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーションとがメッセージの送受信を利用して同期的に連携動作するシーケンスの一例を示す図である。
【図１１】ターゲットプログラム２０と、外部ハードウエアをシミュレートするユーザーアプリケーションとがコールバックを利用して同期的に連携動作するシーケンスの一例を示す。
【図１２】本発明の各実施形態に係るプログラムシミュレーション装置のハードウエア構成の一例を示すブロック図である。
【符号の説明】
１０　シミュレーション装置
２０　ターゲットプログラム
３０　仮想デバイスシミュレータプログラム
４０　デバッガアプリケーション
１１０　命令セットシミュレータＤＬＬ
１２０　仮想デバイスシミュレータＤＬＬ
１３０　スケジューラ
１４０　命令実行部
１５０　命令実行イベント検出部
１６０　メモリ管理部
１７０　メモリイベント検出部
１８０　レジスタ管理部
１９０　レジスタイベント検出部
２１０　トリガアクション実行部
【図１】
2004094800.tif 000003
【図２】
2004094800.tif 000004
【図３】
2004094800.tif 000005
【図４】
2004094800.tif 000006
【図５】
2004094800.tif 000007
【図６】
2004094800.tif 000008
【図７】
2004094800.tif 000009
【図８】
2004094800.tif 000010
【図９】
2004094800.tif 000011
【図１０】
2004094800.tif 000012
【図１１】
2004094800.tif 000013
【図１２】
2004094800.tif 000014