(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムプログラムを実行し、ハードウェア資源を制御するホスト制御手段と、
前記オペレーティングシステムプログラムと同じオペレーティングシステムプログラムを実行するゲスト制御手段と、
前記ホスト制御手段と前記ゲスト制御手段との間に設けられ、前記ゲスト制御手段による前記ハードウェア資源の制御を可能とするエミュレート手段と、
前記ハードウェア資源が実行可能な処理をハードウェア記述言語で記述したＨＤＬプログラムを変更する変更手段と、を備え、
前記ゲスト制御手段は、前記ハードウェア資源を制御するためドライバープログラムを実行するゲストドライバー手段を含み、
前記エミュレート手段は、前記変更されたＨＤＬプログラムを実行することにより前記ハードウェア資源をエミュレートするデバイスエミュレート手段と、
前記ゲストドライバー手段による前記ハードウェア資源の制御に従って前記ホスト制御手段を制御して前記ハードウェア資源を制御させる第１の制御と、前記ゲストドライバー手段による前記ハードウェア資源の制御に従って前記デバイスエミュレート手段を制御する第２の制御とのいずれかに切り換える切換手段と、を含む、画像処理装置。
【請求項２】
前記ハードウェア資源は、複数あり、
前記複数のハードウェア資源のうちからユーザーにより選択されたハードウェア資源を特定する資源特定手段と、
前記特定されたハードウェア資源に対応するＨＤＬプログラムを取得するプログラム取得手段と、をさらに備え、
前記変更手段は、前記取得されたＨＤＬプログラムをユーザーによる指示に基づいて変更し、
前記切換手段は、前記特定されたハードウェア資源に対して前記第１の制御と前記第２の制御とのいずれかに切り換える、請求項１に記載の画像処理装置。
【請求項３】
前記変更手段は、前記ハードウェア資源が処理を実行してから結果を出力するまでの応答時間を延長するコマンドを追加する延長コマンド追加手段を、含む、請求項１または２に記載の画像処理装置。
【請求項４】
前記変更手段は、前記ハードウェア資源が処理を実行するために前記ゲストドライバー手段から受け付けるパラメータをチェックするコマンドを追加するパラメータチェックコマンド追加手段を、含む、請求項１〜３のいずれかに記載の画像処理装置。
【請求項５】
前記変更手段は、前記ハードウェア資源が処理を実行することにより変化する変数をチェックするコマンドを追加する変数チェックコマンド追加手段を、含む、請求項１〜４のいずれかに記載の画像処理装置。
【請求項６】
前記ハードウェア資源は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である、請求項１〜５のいずれかに記載の画像処理装置。
【請求項７】
前記ハードウェア資源は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である、請求項１〜５のいずれかに記載の画像処理装置。
【請求項８】
前記ゲスト制御手段を制御して前記ハードウェア資源を制御する処理を定めたアプリケーションプログラムを実行するアプリ実行手段を、さらに備えた請求項１〜７のいずれかに記載の画像処理装置。
【請求項９】
画像処理装置で実行されるアプリケーションプログラムをデバッグするデバッグ支援方法であって、
前記画像処理装置は、オペレーティングシステムプログラムを実行し、ハードウェア資源を制御するホスト制御手段と、
前記オペレーティングシステムプログラムと同じオペレーティングシステムプログラムを実行するゲスト制御手段と、
前記ホスト制御手段と前記ゲスト制御手段との間に設けられ、前記ゲスト制御手段による前記ハードウェア資源の制御を可能とするエミュレート手段と、を備え、
前記ゲスト制御手段は、前記ハードウェア資源を制御するためドライバープログラムを実行するゲストドライバー手段を含み、
前記デバッグ支援方法は、前記ハードウェア資源が実行可能な処理をハードウェア記述言語で記述したＨＤＬプログラムを変更する変更ステップと、
前記ゲストドライバー手段による前記ハードウェア資源の制御に従って前記ホスト制御手段を制御して前記ハードウェア資源を制御させる第１の制御と、前記ゲストドライバー手段による前記ハードウェア資源の制御に従って、前記ハードウェア資源をエミュレートするために前記変更されたＨＤＬプログラムを実行する第２の制御とのいずれかに切り換える切換ステップと、を含むデバッグ支援方法。
【請求項１０】
前記ハードウェア資源は、複数あり、
前記複数のハードウェア資源のうちからユーザーにより選択されたハードウェア資源を特定する資源特定ステップと、
前記特定されたハードウェア資源に対応するＨＤＬプログラムを取得するプログラム取得ステップを、をさらに含み、
前記変更ステップは、前記取得されたＨＤＬプログラムをユーザーによる指示に基づいて変更するステップを含み、
前記切換ステップは、前記特定されたハードウェア資源に対して前記第１の制御と前記第２の制御とのいずれかに切り換えるステップを含む、請求項９に記載のデバッグ支援方法。
【請求項１１】
前記変更ステップは、前記ハードウェア資源が処理を実行してから結果を出力するまでの応答時間を延長するコマンドを追加する延長コマンド追加ステップを、含む、請求項９または１０に記載のデバッグ支援方法。
【請求項１２】
前記変更ステップは、前記ハードウェア資源が処理を実行するために前記ゲストドライバー手段から受け付けるパラメータをチェックするコマンドを追加するパラメータチェックコマンド追加ステップを、含む、請求項９〜１１のいずれかに記載のデバッグ支援方法。
【請求項１３】
前記変更ステップは、前記ハードウェア資源が処理を実行することにより変化する変数をチェックするコマンドを追加する変数チェックコマンド追加ステップを、含む、請求項９〜１２のいずれかに記載のデバッグ支援方法。
【請求項１４】
前記ハードウェア資源は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である、請求項１０〜１３のいずれかに記載のデバッグ支援方法。
【請求項１５】
前記ハードウェア資源は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である、請求項９〜１３のいずれかに記載のデバッグ支援方法。
【請求項１６】
前記画像処理装置は、前記ゲスト制御手段を制御して前記ハードウェア資源を制御する処理を定めたアプリケーションプログラムを実行するアプリ実行手段を、さらに備えた請求項９〜１５のいずれかに記載のデバッグ支援方法。
【請求項１７】
請求項９〜１６のいずれかに記載のデバッグ支援方法を、前記画像処理装置を制御するコンピューターに実行させるデバッグ支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像処理装置、デバッグ支援方法およびデバッグ支援プログラムに関し、特に、複数のオペレーティングシステムがインストールされた画像処理装置、その画像処理装置で実行されるデバッグ支援方法およびデバッグ支援プログラムに関する。
【背景技術】
【０００２】
画像を処理する画像処理装置で代表されるＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｆｅｒａｌ）は、種々のハードウェア資源が搭載されており、ＣＰＵによってそれらが制御される。ハードウェア資源は、例えば、画像データを処理するためのＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、用紙に画像を形成するエンジン等である。また、ＭＦＰには、アプリケーションプログラムがインストールされており、そのアプリケーションプログラムが、ハードウェア資源を制御する処理を含む場合がある。このようなアプリケーションプログラムを開発する段階で、アプリケーションプログラムで定められたハードウェア資源を制御する処理と、ハードウェア資源の動作とを整合させる必要がある。特に、複数のアプリケーションプログラムが１つのハードウェア資源を制御する場合に、制御が競合することによるエラーが発生する場合がある。この場合、実際にアプリケーションプログラムが完成した段階で、アプリケーションプログラムを実行して、ハードウェア資源の動作との整合性をチェックする方法がある。
【０００３】
しかしながら、アプリケーションプログラムがハードウェア資源を制御してからハードウェア資源から応答があるまでの間にエラーの原因が存在するような場合、ハードウェア資源を制御してから応答があるまでの期間が短いために、エラーが発生する確率が低く、エラーの原因を特定することが困難であるといった問題がある。例えば、特開２０１３−０１２１９６号公報には、ターゲットハードウェアプラットフォームにより実行されるソフトウェアアプリケーションの実行に使用される方法であって、ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述を決定すること、ＨＤＬ記述に基づいてターゲットハードウェアプラットフォームと機能的に等価なプログラマブルハードウェアコンポーネントを構成する技術が記載されている。しかしながら、特開２０１３−０１２１９６号公報に記載の方法を適用したとしても、ＡＳＩＣのレスポンスを遅らせた仕様のプログラマブルハードウェアコンポーネントを構成しなければならず、そのような仕様のプログラマブルハードウェアコンポーネントを構成するために費やされるコストの面で現実的でない。
【特許文献１】特開２０１３−０１２１９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この発明は上述した問題点を解決するためになされたもので、この発明の目的の１つは、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能な画像処理装置を提供することである。
【０００５】
この発明の他の目的は、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能なデバッグ支援方法を提供することである。
【０００６】
この発明のさらに他の目的は、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能なデバッグ支援プログラムを提供することである。
【課題を解決するための手段】
【０００７】
上述した目的を達成するためにこの発明のある局面によれば、画像処理装置は、オペレーティングシステムプログラムを実行し、ハードウェア資源を制御するホスト制御手段と、オペレーティングシステムプログラムと同じオペレーティングシステムプログラムを実行するゲスト制御手段と、ホスト制御手段とゲスト制御手段との間に設けられ、ゲスト制御手段によるハードウェア資源の制御を可能とするエミュレート手段と、ハードウェア資源が実行可能な処理をハードウェア記述言語で記述したＨＤＬプログラムを変更する変更手段と、を備え、ゲスト制御手段は、ハードウェア資源を制御するためドライバープログラムを実行するゲストドライバー手段を含み、エミュレート手段は、変更されたＨＤＬプログラムを実行することによりハードウェア資源をエミュレートするＨＤＬ実行手段と、ゲストドライバー手段によるハードウェア資源の制御に従ってホスト制御手段を制御してハードウェア資源を制御させる第１の制御と、ゲストドライバー手段によるハードウェア資源の制御に従ってデバイスエミュレート手段を制御する第２の制御とのいずれかに切り換える切換手段と、を含む。
【０００８】
この局面に従えば、ハードウェア資源が実行可能な処理をハードウェア記述言語で記述したＨＤＬプログラムを変更し、ハードウェア資源の制御に従ってハードウェア資源を制御させる第１の制御と、ハードウェア資源の制御に従って変更されたＨＤＬプログラムを実行する第２の制御とのいずれかに切り換える。このため、第２の制御に切り換える場合には、ハードウェア資源が実行可能な処理を変更した動作をエミュレートすることができる。その結果、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能な画像処理装置を提供することができる。
【０００９】
好ましくは、ハードウェア資源は、複数あり、複数のハードウェア資源のうちからユーザーにより選択されたハードウェア資源を特定する資源特定手段と、特定されたハードウェア資源に対応するＨＤＬプログラムを取得するプログラム取得手段と、をさらに備え、変更手段は、取得されたＨＤＬプログラムをユーザーによる指示に基づいて変更し、切換手段は、特定されたハードウェア資源に対して第１の制御と第２の制御とのいずれかに切り換える。
【００１０】
この局面に従えば、複数のハードウェア資源のうちからユーザーにより選択されたハードウェア資源の動作を、ユーザーによる指示に基づいて変更した状態で再現することができる。
【００１１】
好ましくは、変更手段は、ハードウェア資源が処理を実行してから結果を出力するまでの応答時間を延長するコマンドを追加する延長コマンド追加手段を、含む。
【００１２】
この局面に従えば、ハードウェア資源が処理を実行してから結果を出力するまでの応答時間を延長した状態でハードウェアの動作を再現するので、ハードウェア資源が処理を実行してから結果を出力するまでの間に発生する不具合が発生する頻度を高めることができる。
【００１３】
好ましくは、変更手段は、ハードウェア資源が処理を実行するためにゲストドライバー手段から受け付けるパラメータをチェックするコマンドを追加するパラメータチェックコマンド追加手段を、含む。
【００１４】
この局面に従えば、ハードウェア資源が受け付けるパラメータをチェックする処理を再現するので、ハードウェア資源に入力されるデータをチェックすることができる。
【００１５】
好ましくは、変更手段は、ハードウェア資源が処理を実行することにより変化する変数をチェックするコマンドを追加する変数チェックコマンド追加手段を、含む。
【００１６】
この局面に従えば、ハードウェア資源が処理に用いる変数をチェックする処理を再現するので、ハードウェア資源の処理をチェックすることができる。
【００１７】
好ましくは、ハードウェア資源は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
【００１８】
この局面に従えば、ＡＳＩＣの動作を変更した状態で、ＡＳＩＣの動作を再現することができる。
【００１９】
好ましくは、ハードウェア資源は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
【００２０】
この局面に従えば、ＦＰＧＡの動作を変更した状態で、ＡＳＩＣの動作を再現することができる。
【００２１】
好ましくは、ゲスト制御手段を制御してハードウェア資源を制御する処理を定めたアプリケーションプログラムを実行するアプリ実行手段を、さらに備える。
【００２２】
この局面に従えば、アプリケーションプログラムがハードウェア資源を制御する処理の不具合の発見を容易にすることができる。
【００２３】
この発明の他の局面によれば、デバッグ支援方法は、画像処理装置で実行されるアプリケーションプログラムをデバッグするデバッグ支援方法であって、画像処理装置は、オペレーティングシステムプログラムを実行し、ハードウェア資源を制御するホスト制御手段と、オペレーティングシステムプログラムと同じオペレーティングシステムプログラムを実行するゲスト制御手段と、ホスト制御手段とゲスト制御手段との間に設けられ、ゲスト制御手段によるハードウェア資源の制御を可能とするエミュレート手段と、を備え、ゲスト制御手段は、ハードウェア資源を制御するためドライバープログラムを実行するゲストドライバー手段を含み、デバッグ支援方法は、ハードウェア資源が実行可能な処理をハードウェア記述言語で記述したＨＤＬプログラムを変更する変更ステップと、ゲストドライバー手段によるハードウェア資源の制御に従ってホスト制御手段を制御してハードウェア資源を制御させる第１の制御と、ゲストドライバー手段によるハードウェア資源の制御に従って、ハードウェア資源をエミュレートするために変更されたＨＤＬプログラムを実行する第２の制御とのいずれかに切り換える切換ステップと、を含む。
【００２４】
この局面に従えば、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能なデバッグ支援方法を提供することができる。
【００２５】
好ましくは、ハードウェア資源は、複数あり、複数のハードウェア資源のうちからユーザーにより選択されたハードウェア資源を特定する資源特定ステップと、特定されたハードウェア資源に対応するＨＤＬプログラムを取得するプログラム取得ステップを、をさらに含み、変更ステップは、取得されたＨＤＬプログラムをユーザーによる指示に基づいて変更するステップを含み、切換ステップは、特定されたハードウェア資源に対して第１の制御と第２の制御とのいずれかに切り換えるステップを含む。
【００２６】
好ましくは、変更ステップは、ハードウェア資源が処理を実行してから結果を出力するまでの応答時間を延長するコマンドを追加する延長コマンド追加ステップを、含む。
【００２７】
好ましくは、変更ステップは、ハードウェア資源が処理を実行するためにゲストドライバー手段から受け付けるパラメータをチェックするコマンドを追加するパラメータチェックコマンド追加ステップを、含む。
【００２８】
好ましくは、変更ステップは、ハードウェア資源が処理を実行することにより変化する変数をチェックするコマンドを追加する変数チェックコマンド追加ステップを、含む。
【００２９】
好ましくは、ハードウェア資源は、ＡＳＩＣである。
【００３０】
好ましくは、ハードウェア資源は、ＦＰＧＡである。
【００３１】
好ましくは、画像処理装置は、ゲスト制御手段を制御してハードウェア資源を制御する処理を定めたアプリケーションプログラムを実行するアプリ実行手段を、さらに備える。
【００３２】
この発明のさらに他の局面によれば、デバッグ支援プログラムは、上記デバッグ支援方法を、画像装置を制御するコンピューターに実行させる。
【００３３】
この局面に従えば、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することが可能なデバッグ支援プログラムを提供することができる。
【図面の簡単な説明】
【００３４】
【図１】本実施の形態におけるＭＦＰの外観を示す斜視図である。
【図２】本実施の形態におけるＭＦＰのハードウェア構成の概要を示すブロック図である。
【図３】本実施の形態におけるＭＦＰが備えるＣＰＵが有する機能の一例を示す図である。
【図４】変更部の詳細な機能の一例を示すブロック図である。
【図５】延長コマンドの追加を説明するための図である。
【図６】パラメータチェックコマンドの追加を説明するための図である。
【図７】変数チェックコマンドの追加を説明するための図である。
【図８】デバッグ処理の流れの一例を示すフローチャートである。
【図９】デバイスエミュレータ生成処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【００３５】
以下、本発明の実施の形態を図面を参照して説明する。以下の説明では同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００３６】
図１は、本実施の形態におけるＭＦＰの外観を示す斜視図である。図２は、本実施の形態におけるＭＦＰのハードウェア構成の概要を示すブロック図である。図１および図２を参照して、画像処理装置として機能するＭＦＰ１００は、メイン回路１１０と、原稿を読み取るための原稿読取部１３０と、原稿を原稿読取部１３０に搬送するための自動原稿搬送装置１２０と、原稿読取部１３０が原稿を読み取って出力する画像データに基づいて用紙等に画像を形成するための画像形成部１４０と、画像形成部１４０に用紙を供給するための給紙部１５０と、ユーザーインターフェースとしての操作パネル１６０とを含む。
【００３７】
メイン回路１１０は、ＣＰＵ（中央演算装置）１１１と、通信インターフェース（Ｉ／Ｆ）部１１２と、ＲＯＭ１１３と、ＲＡＭ１１４と、ＡＳＩＣ１１５と、大容量記憶装置としてのハードディスクドライブ（ＨＤＤ）１１６と、ファクシミリ部１１７と、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  ＲＯＭ）１１９が装着される外部記憶装置１１８と、を含む。ＣＰＵ１１１は、自動原稿搬送装置１２０、原稿読取部１３０、画像形成部１４０、給紙部１５０、および操作パネル１６０と接続され、ＭＦＰ１００の全体を制御する。
【００３８】
ＲＯＭ１１３は、ＣＰＵ１１１が実行するプログラム、またはそのプログラムを実行するために必要なデータを記憶する。ＲＡＭ１１４は、ＣＰＵ１１１がプログラムを実行する際の作業領域として用いられる。
【００３９】
ＡＳＩＣ１１５は、ＣＰＵ１１１により制御され、画像データを処理する。ＡＳＩＣ１１５が実行する画像処理は、限定するものではないが、例えば、画像データのフォーマットを変換するフォーマット変換処理、画像データを符号化する圧縮処理、画像データの画像を処理する画像処理、を含む。画像処理は、例えば、画像のエッジを強調する処理、階調を滑らかにするスムージング処理、色をマッチングさせるカラーマッチング処理、画像を合成する合成処理等を含む。
【００４０】
通信Ｉ／Ｆ部１１２は、ＭＦＰ１００をネットワークに接続するためのインターフェースである。ＣＰＵ１１１は、通信Ｉ／Ｆ部１１２を介して、ネットワークに接続されたコンピューターとの間で通信し、データを送受信する。また、通信Ｉ／Ｆ部１１２は、ネットワークを介してインターネットに接続されたコンピューターと通信が可能である。
【００４１】
ファクシミリ部１１７は、公衆交換電話網（ＰＳＴＮ）に接続され、ＰＳＴＮにファクシミリデータを送信する、またはＰＳＴＮからファクシミリデータを受信する。ファクシミリ部１１７は、受信したファクシミリデータを、ＨＤＤ１１６に記憶する、または画像形成部１４０に出力する。画像形成部１４０は、ファクシミリ部１１７により受信されたファクシミリデータを用紙にプリントする。また、ファクシミリ部１１７は、ＨＤＤ１１６に記憶されたデータをファクシミリデータに変換して、ＰＳＴＮに接続されたファクシミリ装置に送信する。
【００４２】
外部記憶装置１１８は、ＣＤ−ＲＯＭ１１９が装着される。ＣＰＵ１１１は、外部記憶装置１１８を介してＣＤ−ＲＯＭ１１９にアクセス可能である。ＣＰＵ１１１は、外部記憶装置１１８に装着されたＣＤ−ＲＯＭ１１９に記憶されたプログラムをＲＡＭ１１４にロードして実行する。なお、ＣＰＵ１１１が実行するプログラムを記憶する媒体としては、ＣＤ−ＲＯＭ１１９に限られず、光ディスク（ＭＯ（Ｍａｇｎｅｔｉｃ  Ｏｐｔｉｃａｌ  ｄｉｓｃ）／ＭＤ（Ｍｉｎｉ  Ｄｉｓｃ）／ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ））、ＩＣカード、光カード、マスクＲＯＭ、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ＥＰＲＯＭ）などの半導体メモリであってもよい。
【００４３】
また、ＣＰＵ１１１が実行するプログラムは、ＣＤ−ＲＯＭ１１９に記憶されたプログラムに限られず、ＨＤＤ１１６に記憶されたプログラムをＲＡＭ１１４にロードして実行するようにしてもよい。この場合、ネットワークに接続された他のコンピューターが、ＭＦＰ１００のＨＤＤ１１６に記憶されたプログラムを書換える、または、新たなプログラムを追加して書き込むようにしてもよい。さらに、ＭＦＰ１００が、ネットワークに接続された他のコンピューターからプログラムをダウンロードして、そのプログラムをＨＤＤ１１６に記憶するようにしてもよい。ここでいうプログラムは、ＣＰＵ１１１が直接実行可能なプログラムだけでなく、ソースプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含む。
【００４４】
操作パネル１６０は、表示部１６１と操作部１６３とを含む。表示部１６１は、例えば、液晶表示装置（ＬＣＤ）または有機ＥＬ表示装置（ｏｒｇａｎｉｃ  ｅｌｅｃｔｒｏｌｕｍｉｎｅｓｃｅｎｃｅ  ｄｉｓｐｌａｙ）であり、ユーザーに対する指示メニューや取得した画像データに関する情報等を表示する。操作部１６３は、タッチパネル１６５と、ハードキー部１６７とを含む。タッチパネル１６５は、静電容量方式である。なお、タッチパネル１６５は、静電容量方式に限らず、例えば、抵抗膜方式、表面弾性波方式、赤外線方式、電磁誘導方式等の他の方式を用いることができる。ハードキー部１６７は、複数のハードキーを含む。ハードキーは、例えば接点スイッチである。
【００４５】
図３は、本実施の形態におけるＭＦＰが備えるＣＰＵが有する機能の一例を示す図である。図３を参照して、ＣＰＵ１１１は、オペレーティングシステムプログラムを実行するホスト制御部５１と、オペレーティングシステムプログラムを実行するゲスト制御部５３と、エミュレートプログラムを実行するエミュレート部５５と、第１アプリケーションプログラムを実行する第１アプリケーション部５７と、第２アプリケーションプログラムを実行する第２アプリケーション部５９と、を含む。
【００４６】
ホスト制御部５１は、ＣＰＵ１１１がオペレーティングシステムプログラムを実行するタスクである。ホスト制御部５１は、ＭＦＰ１００が備えるハードウェア資源を制御する。ハードウェア資源は、通信Ｉ／Ｆ部１１２、ＲＯＭ１１３、ＲＡＭ１１４、ＡＳＩＣ１１５、ＨＤＤ１１６、ファクシミリ部１１７、外部記憶装置１１８、自動原稿搬送装置１２０、原稿読取部１３０、画像形成部１４０、給紙部１５０、および操作パネル１６０を、含む。ホスト制御部５１は、ＭＦＰ１００が備える複数のハードウェア資源をそれぞれ制御するための複数のドライバープログラムをそれぞれ実行する複数のタスクを含む。ここでは、ドライバープログラムとして、ＡＳＩＣ１１５を制御するためのドライバープログラムを例に説明する。ホスト制御部５１は、ＡＳＩＣ１１５を制御するためのドライバープログラムを実行するタスクであるホストドライバー部７７を含む。
【００４７】
ゲスト制御部５３は、ＣＰＵ１１１がオペレーティングシステムプログラムを実行するタスクである。ゲスト制御部５３が実行するオペレーティングシステムプログラムは、ホスト制御部５１が実行するオペレーティングプログラムと同じである。ゲスト制御部５３は、ＭＦＰ１００が備える複数のハードウェア資源をそれぞれ制御するための複数のドライバープログラムをそれぞれ実行する複数のタスクを含む。ここでは、ドライバープログラムとして、ＡＳＩＣ１１５を制御するためのドライバープログラムを例に説明する。ホスト制御部５１は、ＡＳＩＣ１１５を制御するためのドライバープログラムを実行するタスクであるゲストドライバー部６９を含む。
【００４８】
エミュレート部５５は、ＣＰＵ１１１がエミュレートプログラムを実行するタスクである。エミュレートプログラムは、ホスト制御部５１が実行するオペレーティングシステムプログラムに適合したアプリケーションプログラムである。エミュレート部５５は、ゲスト制御部５３に対する仮想デバイスであり、ホスト制御部５１によるハードウェア資源の制御をエミュレートする。エミュレート部５５は、ゲスト制御部５３を仮想マシンとして機能させる。これにより、ゲスト制御部５３は、ＭＦＰ１００が備えるハードウェア資源を制御可能となる。
【００４９】
第１アプリケーション部５７は、オペレーティングシステムプログラムに適合した第１アプリケーションプログラムを実行するタスクである。第１アプリケーション部５７は、ホスト制御部５１を制御して、ＭＦＰ１００が備えるハードウェア資源を制御可能である。
【００５０】
第１アプリケーション部５７およびエミュレート部５５それぞれは、ホスト制御部５１を制御可能であり、ホスト制御部５１によって管理される。このため、第１アプリケーション部５７とエミュレート部５５とは、互いに他方を認識することができるので、プロセス間通信等を用いて通信することができる。
【００５１】
第２アプリケーション部５９は、オペレーティングシステムプログラムに適合した第２アプリケーションプログラムを実行するタスクである。第２アプリケーション部５９は、ゲスト制御部５３を制御して、ＭＦＰ１００が備えるハードウェア資源を制御可能である。換言すれば、第２アプリケーション部５９は、第２アプリケーションプログラムがハードウェア資源を制御する処理を記述する場合、ゲスト制御部５３を制御して、ＭＦＰ１００が備えるハードウェア資源を制御する。
【００５２】
第１アプリケーション部５７は、ユーザーによる操作を受け付ける操作受付部６１と、ハードウェア資源のいずれかを特定する資源特定部６３と、プログラム取得部６５と、変更部６７と、を含む。操作受付部６１は、操作パネル１６０を制御して、ユーザーが操作部１６３に入力する操作を受け付ける。ユーザーがスマートフォン等の携帯情報装置を操作してＭＦＰ１００を遠隔操作する場合、操作受付部６１は、通信Ｉ／Ｆ部１１２を制御して、通信Ｉ／Ｆ部１１２が通信する携帯情報装置から受信する操作を受け付ける。操作受付部６１は、ユーザーによる操作を受け付ける場合、受け付けられた操作を資源特定部６３および変更部６７に出力する。
【００５３】
資源特定部６３は、ハードウェア資源を特定する。例えば、資源特定部６３は、ハードウェア資源である通信Ｉ／Ｆ部１１２、ＲＯＭ１１３、ＲＡＭ１１４、ＡＳＩＣ１１５、ＨＤＤ１１６、ファクシミリ部１１７、外部記憶装置１１８、自動原稿搬送装置１２０、原稿読取部１３０、画像形成部１４０、給紙部１５０、および操作パネル１６０を、選択可能なリストを表示部１６１に表示し、操作受付部６１から入力される操作により選択されるハードウェア資源を特定する。資源特定部６３は、特定されたハードウェア資源を識別するためのプログラム識別情報をプログラム取得部６５に出力する。ここでは、ＡＳＩＣ１１５がユーザーにより選択される場合を例に説明する。
【００５４】
プログラム取得部６５は、資源特定部６３からハードウェア資源の識別情報が入力されることに応じて、その識別情報で識別されるハードウェア資源に対応するハードウェア記述言語（ＨＤＬ）プログラムを取得する。例えば、ＨＤＤ１１６に、複数のハードウェア資源の少なくとも１つのＨＤＬプログラムを記憶している場合、ＨＤＤ１１６に資源特定部６３から入力されるプログラム識別情報で特定されるハードウェア資源に対応するＨＤＬプログラムがＨＤＤ１１６に記憶されていれば、そのＨＤＬプログラムを読み出す。ハードウェア資源に対応するＨＤＬプログラムは、そのハードウェア資源の製造者から取得するようにすればよい。プログラム取得部６５は、取得されたＨＤＬプログラムを変更部６７に出力する。ここでは、資源特定部６３によってＡＳＩＣ１１５がユーザーにより選択されるので、プログラム取得部６５は、ＡＳＩＣ１１５に対応するＨＤＬプログラムを取得し、変更部６７に出力する。
【００５５】
変更部６７は、操作受付部６１から入力されるユーザーの操作に従って、ＨＤＬプログラムを変更する。変更部６７は、変更されたＨＤＬプログラムをコンパイルすることによって、実行形式のデバイスエミュレートプログラムを生成し、デバイスエミュレートプログラムを、エミュレート部５５に出力する。ここでは、ＡＳＩＣ１１５に対応するＨＤＬプログラムを変更し、コンパイルすることによってＡＳＩＣ１１５に対応するデバイスエミュレートプログラムをエミュレート部５５に出力する。
【００５６】
エミュレート部５５は、切換部７１と、デバイスエミュレート部７３と、仮想デバイス部７５と、を含む。デバイスエミュレート部７３は、変更部６７から入力されるＡＳＩＣ１１５に対応するデバイスエミュレートプログラムを実行する。デバイスエミュレート部７３は、ゲストドライバー部６９によるＡＳＩＣ１１５の制御に従って、ＡＳＩＣ１１５をエミュレートする。ただし、デバイスエミュレート部７３は、変更部６７により変更された処理については、ＡＳＩＣ１１５と異なる処理を実行する。
【００５７】
仮想デバイス部７５は、ゲストドライバー部６９に対してＡＳＩＣ１１５の仮想デバイスとして機能する。具体的には、仮想デバイス部７５は、ゲストドライバー部６９によるＡＳＩＣ１１５の制御に従ってホスト制御部５１のホストドライバー部７７を制御してＡＳＩＣ１１５を制御させる。
【００５８】
切換部７１は、ゲストドライバー部６９の出力を仮想デバイス部７５に出力する第１の制御と、ゲストドライバー部６９の出力をデバイスエミュレート部７３に出力する第２の制御と、のいずれかに切り換える。切換部７１は、ユーザーが操作部１６３に入力する切換指示に従って、第１の制御と第２の制御とのいずれかに切り換える。切換部７１が第１の制御に切り換える場合、ゲストドライバー部６９によるＡＳＩＣ１１５の制御がＡＳＩＣ１１５に出力されるので、ＡＳＩＣ１１５が制御される。切換部７１が第２の制御に切り換える場合、ゲストドライバー部６９によるＡＳＩＣ１１５の制御がデバイスエミュレート部７３に出力されるので、デバイスエミュレート部７３が制御される。
【００５９】
図４は、変更部の詳細な機能の一例を示すブロック図である。図４を参照して、変更部６７は、延長コマンド追加部８１と、パラメータチェックコマンド追加部８３と、変数チェックコマンド追加部８５と、を含む。延長コマンド追加部８１は、ユーザーにより指定された変更対象処理について応答するタイミングを遅延するコマンドを追加する。例えば、延長コマンド追加部８１は、ＨＤＬプログラムを解析して、ＨＤＬプログラムで定められた１以上の処理を特定し、特定された１以上の処理を選択可能なリストを表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により選択された処理を、変更対象処理に特定する。延長コマンド追加部８１は、遅延時間を設定する画面を表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により特定される遅延時間を設定する。延長コマンド追加部８１は、ＨＤＬプログラム中で変更対象処理を記述する部分の最後に、遅延時間だけ待機する延長コマンドを追加する。
【００６０】
パラメータチェックコマンド追加部８３は、ＡＳＩＣ１１５に入力されるパラメータをチェックするコマンドを追加する。例えば、パラメータチェックコマンド追加部８３は、ＨＤＬプログラムを解析して、ＨＤＬプログラムで定められた１以上の処理を特定し、特定された１以上の処理を選択可能なリストを表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により選択された処理を、変更対象処理に特定する。次に、パラメータチェックコマンド追加部８３は、ＨＤＬプログラムを解析して、変更対象処理に対してＨＤＬプログラムで定められたパラメータを特定し、特定された１以上のパラメータを選択可能なリストを表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により選択されたパラメータを、対象パラメータに特定する。パラメータチェックコマンド追加部８３は、パラメータの取り得る範囲を設定する画面を表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により特定される範囲を設定する。パラメータチェックコマンド追加部８３は、ＨＤＬプログラム中で対象パラメータを用いた処理を記述する部分の前に、パラメータが設定された範囲外であることを検出するコマンドと、パラメータが設定された範囲外であることが検出される場合に実行する処理を示すコマンドと、を含むパラメータチェックコマンドを追加する。
【００６１】
変数チェックコマンド追加部８５は、ＡＳＩＣ１１５が用いる変数をチェックするコマンドを追加する。例えば、変数チェックコマンド追加部８５は、ＨＤＬプログラムを解析して、ＨＤＬプログラムで定められた１以上の処理を特定し、特定された１以上の処理を選択可能なリストを表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により選択された処理を、変更対象処理に特定する。次に、変数チェックコマンド追加部８５は、ＨＤＬプログラムを解析して、変更対象処理に対してＨＤＬプログラムで定められた変数を特定し、特定された１以上の変数を選択可能なリストを表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により選択された変数を、対象変数に特定する。変数チェックコマンド追加部８５は、対象変数の取り得る範囲を設定する画面を表示部１６１に表示し、操作受付部６１から入力されるユーザーによる操作により特定される範囲を設定する。変数チェックコマンド追加部８５は、ＨＤＬプログラム中で対象変数を用いた処理を記述する部分の後に、対象変数が設定された範囲外であることを検出するコマンドと、対象変数が設定された範囲外であることが検出される場合に実行する処理を示すコマンドと、を含む変数チェックコマンドを追加する。
【００６２】
図５は、延長コマンドの追加を説明するための図である。図５（Ａ）は、延長コマンドを追加する前のＨＤＬプログラムの一例を示す図である。図５（Ａ）を参照して、ＨＤＬプログラムは、変更対象処理の記述３０１を含む。ここでは、変更対象処理は、プロセスｄｏ＿ａｄｄ（）として示される。図５（Ｂ）は、延長コマンドを追加した後のＨＤＬプログラムの一例を示す図である。図５（Ｂ）を参照して、変更対象処理の記述３０１の最後に、ｗａｉｔ（２０，ＳＣ＿ＭＳ）で示される延長コマンド３０３が追加されている。ここでは、延長コマンド３０３であるｗａｉｔ（２０，ＳＣ＿ＭＳ）は、２０ｍｓだけ待機することを示している。
【００６３】
図６は、パラメータチェックコマンドの追加を説明するための図である。図６（Ａ）は、パラメータチェックコマンドを追加する前のＨＤＬプログラムの一例を示す図である。図６（Ａ）を参照して、ＨＤＬプログラムは、変更対象処理の記述３１１を含む。ここでは、変更対象処理は、プロセスｄｏ＿ａｄｄ（）として示される。また、ＨＤＬプログラムは、変更対象処理に入力されるデータとしてパラメータの記述３１２を含む。ここでは、パラメータは、ａとｂで示される。変更対象処理であるプロセスｄｏ＿ａｄｄ（）は、パラメータａ，ｂを処理する記述３１５を含む。パラメータａ，ｂを処理する記述３１５は、ｓｕｍ  ａ＋ｂで示される。
【００６４】
図６（Ｂ）は、パラメータチェックコマンドを追加した後のＨＤＬプログラムの一例を示す図である。図６（Ｂ）を参照して、ＨＤＬプログラムは、パラメータａ，ｂを処理する記述３１５の前に、パラメータチェックコマンドの記述３１３を含む。パラメータチェックコマンドは、パラメータが設定された範囲外であることを検出するコマンドとしてｉｆ（ａ＜０）｜｜（ａ＞２５５）と、パラメータが設定された範囲外であることが検出される場合に実行する処理を示すコマンドとして「エラー処理」と、を含む。なお、パラメータの範囲を、０以上２５５以下としている。また、パラメータが設定された範囲外であることが検出される場合に実行する処理を示すコマンドを、実際のコマンドを省略した「エラー処理」として示している。
【００６５】
図７は、変数チェックコマンドの追加を説明するための図である。図７（Ａ）は、変数チェックコマンドを追加する前のＨＤＬプログラムの一例を示す図である。図７（Ａ）を参照して、ＨＤＬプログラムは、変更対象処理の記述３２１を含む。ここでは、変更対象処理は、プロセスｄｏ＿ａｄｄ（）として示される。また、ＨＤＬプログラムは、変更対象処理で用いられる変数の記述３２２を含む。ここでは、変数は、ｓｕｍ２で示される。変更対象処理であるプロセスｄｏ＿ａｄｄ（）は、変数ｓｕｍ２を処理する記述３２５を含む。変数ｓｕｍ２を処理する記述３２５は、ｓｕｍ２＝ｓｕｍ２＋ｓｕｍ１で示される。
【００６６】
図７（Ｂ）は、変数チェックコマンドを追加した後のＨＤＬプログラムの一例を示す図である。図７（Ｂ）を参照して、ＨＤＬプログラムは、変数ｓｕｍ２を処理する記述３２５の後に、変数チェックコマンドの記述３２３を含む。変数チェックコマンドの記述３２３は、変数が設定された範囲外であることを検出するコマンドとしてｉｆ（ｓｕｍ２＜１０２３）｜｜（ｓｕｍ２＞６５５３６）と、変数が設定された範囲外であることが検出される場合に実行する処理を示すコマンドとして「エラー処理」と、を含む。なお、変数の範囲を、１０２３以上６５５３６以下としている。また、変数が設定された範囲外であることが検出される場合に実行する処理を示すコマンドを、実際のコマンドを省略した「エラー処理」として示している。
【００６７】
図８は、デバッグ支援処理の流れの一例を示すフローチャートである。図８を参照して、ＣＰＵ１１１は、デバイスエミュレートプログラム生成処理を実行する（ステップＳ０１）。デバイスエミュレートプログラム生成処理の詳細は後述するが、ハードウェア資源、ここでは、ＡＳＩＣ１１５をエミュレートするデバイスエミュレートプログラムを生成する処理である。次のステップＳ０２においては、エミュレートプログラムをインストールし、仮想化レイヤを生成する。そして、デバイスエミュレータを生成する（ステップＳ０３）。具体的には、仮想化レイヤにステップＳ０１において生成されたデバイスエミュレートプログラムをインストールすることにより、デバイスエミュレータを生成する。デバイスエミュレータは、ＣＰＵ１１１がデバイスエミュレートプログラムを実行するタスクである。
【００６８】
次のステップＳ０４においては、仮想マシンを生成する。具体的には、仮想化レイヤの基で、オペレーティングシステムプログラムをインストールする。オペレーティングシステムプログラムは、ＣＰＵ１１１に元々インストールされているオペレーティングシステムプログラムと同じオペレーティングシステムプログラムである。
【００６９】
次のステップＳ０５においては、仮想マシンにアプリケーションプログラムをインストールする。アプリケーションプログラムは、ＭＦＰ１００のハードウェア資源、ここでは、ＡＳＩＣ１１５を制御した処理を定めたプログラムであり、デバッグの対象となるプログラムである。
【００７０】
次のステップＳ０６においては、切換指示を受け付けたか否かを判断する。ユーザーが操作部１６３に入力する操作に従って切換指示を受け付ける。切換指示は、第１の制御に切り換える指示と、第２の制御に切り換える指示と、のいずれかである。第１の制御に切り換える指示を受け付けたならば、ＡＳＩＣ１１５を有効に設定し（ステップＳ０７）、処理をステップＳ０９に進める。第２の制御に切り換える指示を受け付けたならば、ステップＳ０３において生成されたデバイスエミュレータを有効に設定し（ステップＳ０８）、処理をステップＳ０９に進める。
【００７１】
ステップＳ０９においては、ステップＳ０５においてインストールされたアプリケーションプログラムを実行し、処理をステップＳ１０に進める。ＣＰＵ１１１がアプリケーションプログラムを実行するタスクは、ＡＳＩＣ１１５を制御する処理を定める場合がある。ＣＰＵ１１１は、ステップＳ０７においてＡＳＩＣ１１５が有効に設定されている状態においては、アプリケーションプログラムを実行するタスクによりＡＳＩＣ１１５が制御される場合は、ＡＳＩＣ１１５に処理を実行させる。また、ＣＰＵ１１１は、ステップＳ０８において、デバイスエミュレータが有効に設定されている場合には、ＣＰＵ１１１がアプリケーションプログラムを実行するタスクによりＡＳＩＣ１１５が制御される場合は、ステップＳ０３において生成されたデバイスエミュレータに処理を実行させる。
【００７２】
ステップＳ１０においては、エラーが発生したか否かを判断する。エラーが発生したならば処理をステップＳ１１に進めるが、そうでなければ処理をステップＳ１３に進める。ここで発生するエラーは、ＣＰＵ１１１がアプリケーションプログラムを実行するタスクによって発生するエラーの他、デバイスエミュレータにおいて発生するエラーを含む。ＭＦＰ１００のユーザーは、発生したエラーに基づいて、アプリケーションプログラム中でエラーの原因を特定することが可能である。ユーザーは、特定したエラーの原因に基づいて、アプリケーションプログラムを変更する。ステップＳ１１においては、アプリケーションプログラムの変更を受け付け（ステップＳ１１）、処理をステップＳ１２に進める。なお、必要に応じて、変更後のアプリケーションプログラムをコンパイルする。ステップＳ１２においては、変更されたアプリケーションプログラムを実行し、処理をステップＳ１０に戻す。
【００７３】
ステップＳ１３においては、デバッグが終了したか否かを判断する。ユーザーが操作部１６３に入力する操作が、デバッグの終了を示す操作ならば処理をステップＳ１４に進めるが、そうでなければ処理をステップＳ１０に戻す。ステップＳ１４においては、アプリケーションプログラムを終了させ、処理をステップＳ１５に進める。ステップＳ１５においては、仮想化を解除する。具体的には、仮想マシンを生成するためにインストールしたオペレーティングシステムプログラムをアンインストールし、エミュレートプログラムをアンインストールする。そして、デバッグの終了したアプリケーションプログラムをインストールし（ステップＳ１６）、処理を終了する。
【００７４】
図９は、デバイスエミュレータ生成処理の流れの一例を示すフローチャートである。デバイスエミュレータ生成処理は、図８のステップＳ０１において、ＣＰＵ１１１により実行される処理である。図９を参照して、ＣＰＵ１１１は、対象となるハードウェア資源を特定する。ＭＦＰ１００が備える複数のハードウェア資源を選択可能なリストを表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により選択されるハードウェア資源を特定する。ここでは、ＡＳＩＣ１１５がユーザーにより選択される場合を例に説明する。
【００７５】
次のステップＳ２２においては、ステップＳ２１において特定されたハードウェア資源、ここでは、ＡＳＩＣ１１５に対応するＨＤＬプログラムを取得する。ＡＳＩＣ１１５に対応するＨＤＬプログラムが、ＡＳＩＣ１１５の製造者から予め取得され、ＨＤＤ１１６に記憶されていれば、そのＨＤＬプログラムを読み出す。
【００７６】
次のステップＳ２３においては、変更対象処理を受け付けるまで待機状態となり、変更対象処理を受け付けたならば処理をステップＳ２４に進める。例えば、ＨＤＬプログラムを解析して、ＨＤＬプログラムで定められた１以上の処理を特定し、特定された１以上の処理を選択可能なリストを表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により選択された処理を、変更対象処理に特定する。
【００７７】
ステップＳ２４においては、変更内容を受け付けるまで待機状態となり、変更内容を受け付けたならば処理をステップＳ２５に進める。ここでは、変更内容として、レスポンス遅延と、パラメータチェックと、変数チェックと、が予め定められている場合を例に説明する。レスポンス遅延の変更内容は、ＡＳＩＣ１１５が制御されてから応答を出力するタイミングを遅延させる処理を追加することを示す。パラメータチェックは、ＡＳＩＣに入力されるパラメータが正しい値であるか否かを判断する処理を追加することを示す。変数チェックは、ＡＳＩＣで用いられる変数が正しい値であるか否かを判断する処理を追加することを示す。ステップＳ２５においては、ステップＳ２４において受け付けられた変更内容によって処理を分岐させる。変更内容がレスポンス遅延ならば処理をステップＳ２６に進め、変更内容がパラメータチェックならば処理をステップＳ２８に進め、変更内容が変数チェックならば処理をステップＳ３１に進める。
【００７８】
ステップＳ２６においては、遅延時間を受け付け、処理をステップＳ２７に進める。例えば、遅延時間を設定する画面を表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により特定される遅延時間を受け付ける。そして、ステップＳ２２において取得されたＨＤＬプログラムに、待機コマンドを追加し（ステップＳ２７）、処理をステップＳ３４に進める。具体的には、ＨＤＬプログラム中で、ステップＳ２３において受け付けられた変更対象処理を記述する部分の最後に、ステップＳ２６において受け付けられた遅延時間だけ待機する待機コマンドを追加する。
【００７９】
ステップＳ２８においては、パラメータを選択し、処理をステップＳ２９に進める。ステップＳ２２において取得されたＨＤＬプログラムを解析して、ステップＳ２３において受け付けられた変更対象処理に対してＨＤＬプログラムで定められたパラメータを特定し、特定された１以上のパラメータを選択可能なリストを表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により選択されたパラメータを、対象パラメータに特定する。ステップＳ２９においては、パラメータの取り得る範囲を受け付け、処理をステップＳ３０に進める。範囲を設定する画面を表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により特定される範囲を特定する。そして、ステップＳ２２において取得されたＨＤＬプログラムに、パラメータチェックコマンドを追加し（ステップＳ３０）、処理をステップＳ３４に進める。具体的には、ＨＤＬプログラム中で、ステップＳ２３において受け付けられた変更対象処理を記述する部分に含まれる対象パラメータを記述する部分の前に、パラメータが設定された範囲外であることを検出するコマンドと、パラメータが設定された範囲外であることが検出される場合に実行する処理を示すコマンドと、を追加する。
【００８０】
ステップＳ３１においては、変数を選択し、処理をステップＳ３２に進める。ステップＳ２２において取得されたＨＤＬプログラムを解析して、ステップＳ２３において受け付けられた変更対象処理に対してＨＤＬプログラムで定められた変数を特定し、特定された１以上の変数を選択可能なリストを表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により選択された変数を、対象変数に特定する。ステップＳ３２においては、変数の取り得る範囲を受け付け、処理をステップＳ３３に進める。範囲を設定する画面を表示部１６１に表示し、ユーザーが操作部１６３に入力する操作により特定される範囲を特定する。そして、ステップＳ２２において取得されたＨＤＬプログラムに、変数チェックコマンドを追加し（ステップＳ３３）、処理をステップＳ３４に進める。具体的には、ＨＤＬプログラム中で、ステップＳ２３において受け付けられた変更対象処理を記述する部分に含まれる対象変数を記述する部分の前に、変数が設定された範囲外であることを検出するコマンドと、変数が設定された範囲外であることが検出される場合に実行する処理を示すコマンドと、を追加する。
【００８１】
ステップＳ３４においては、ＨＤＤプログラムの変更が終了したか否かを判断する。操作部１６３が、ＨＤＤプログラムの変更を終了させることを示す操作を受け付けたならば、処理をステップＳ３５に進めるが、そうでなければ処理をステップＳ２３に戻す。
【００８２】
ステップＳ３５においては、変更された後のＨＤＤプログラムをコンパイルし、処理をデバッグ処理に戻す。変更された後のＨＤＤプログラムをコンパイルすることにより、デバイスエミュレートプログラムが生成される。
【００８３】
以上説明したように本実施の形態におけるＭＦＰ１００は、ＡＳＩＣ１５５に対応するＨＤＬプログラムで記述された処理を変更し、第２アプリケーションプログラムを実行するタスクによるＡＳＩＣ１５５の制御に従ってＡＳＩＣ１５５を制御させる第１の制御と、第２アプリケーションプログラムを実行するタスクによるＡＳＩＣ１５５の制御に従って変更されたＨＤＬプログラムを実行する第２の制御とのいずれかに切り換える。このため、第２の制御に切り換える場合には、ＡＳＩＣ１１５が実行可能な処理を変更した動作をエミュレートすることができる。したがって、ハードウェア資源を変更することなく、ハードウェア資源の動作を変更した状態を再現することができる。また、第２アプリケーションプログラムのＡＳＩＣ１１５を制御する処理の部分のバグの発見を容易にすることができる。
【００８４】
また、ＭＦＰ１００は、複数のハードウェア資源のうちからユーザーにより選択されたＡＳＩＣ１１５に対応するＨＤＬプログラムを取得し、取得されたＨＤＬプログラムをユーザーによる指示に基づいて変更するので、ユーザーにより選択されたＡＳＩＣ１１５の動作を、ユーザーによる指示に基づいて変更した状態で再現することができる。
【００８５】
また、ＭＦＰ１００は、ＡＳＩＣ１１５のＨＤＬプログラムのうちユーザーにより指定された処理の記述の最後に待機コマンドを追加するので、ＡＳＩＣ１１５がユーザーにより指定された処理を実行した結果を出力するタイミングを遅延させることができる。このため、ＡＳＩＣ１１５がユーザーにより指定された処理を実行してから結果を出力するまでの間に発生する不具合が発生する頻度を高めることができる。したがって、第２アプリケーションプログラムがＡＳＩＣ１１５を制御する処理の記述のバグの発見を容易にすることができる。
【００８６】
また、ＭＦＰ１００は、ＡＳＩＣ１１５のＨＤＬプログラムのうちユーザーにより指定された処理で用いられるパラメータをチェックするコマンドを追加するので、ＡＳＩＣ１１５が外部から受け付けるパラメータをチェックすることができる。したがって、第２アプリケーションプログラムがＡＳＩＣ１１５を制御する処理の記述のバグの発見を容易にすることができる。
【００８７】
また、ＭＦＰ１００は、ＡＳＩＣ１１５のＨＤＬプログラムのうちユーザーにより指定された処理で用いられる変数をチェックするコマンドを追加するので、ＡＳＩＣ１１５が処理で用いる変数をチェックすることができる。したがって、第２アプリケーションプログラムがＡＳＩＣ１１５を制御する処理の記述のバグの発見を容易にすることができる。
【００８８】
なお、上述した実施の形態においては、ハードウェア資源の一例として、ＡＳＩＣ１１５を例に説明したが、他のハードウェア資源である通信Ｉ／Ｆ部１１２、ＲＯＭ１１３、ＲＡＭ１１４、ＨＤＤ１１６、ファクシミリ部１１７、外部記憶装置１１８、自動原稿搬送装置１２０、原稿読取部１３０、画像形成部１４０、給紙部１５０、および操作パネル１６０についても、同様に処理を再現することができる。また、ＡＳＩＣに代えて、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を用いるようにしてもよい。
【００８９】
なお、本実施の形態においては、画像処理装置の一例としてＭＦＰ１００を例に説明したが、ハードウェア資源を制御する処理を定めたアプリケーションプログラムがインストールされる装置であれば、例えば、ファクシミリ装置、スキャナ装置、カメラ等であってもよい。また、図８および図９に示したデバッグ支援処理をＭＦＰ１００に実行させるデバッグ支援方法として発明を捉えることができる。
【００９０】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００９１】
１００  ＭＦＰ、１１０  メイン回路、１１１  ＣＰＵ、１１２  通信Ｉ／Ｆ部、１１３  ＲＯＭ、１１４  ＲＡＭ、１１５  ＡＳＩＣ、１１６  ＨＤＤ、１１７  ファクシミリ部、１１８  外部記憶装置、１１９  ＣＤ−ＲＯＭ、１２０  自動原稿搬送装置、１３０  原稿読取部、１４０  画像形成部、１５０  給紙部、１６０  操作パネル、１６１  表示部、１６３  操作部、１６５  タッチパネル、１６７  ハードキー部、５１  ホスト制御部、５３  ゲスト制御部、５５  エミュレート部、５７  アプリケーション部、５９  アプリケーション部、６１  操作受付部、６３  資源特定部、６５  プログラム取得部、６７  変更部、６９  ゲストドライバー部、７１  切換部、７３  デバイスエミュレート部、７５  仮想デバイス部、７７  ホストドライバー部、８１  延長コマンド追加部、８３  パラメータチェックコマンド追加部、８５  変数チェックコマンド追加部。
【図１】
0006702021.tif 000002
【図２】
0006702021.tif 000003
【図３】
0006702021.tif 000004
【図４】
0006702021.tif 000005
【図５】
0006702021.tif 000006
【図６】
0006702021.tif 000007
【図７】
0006702021.tif 000008
【図８】
0006702021.tif 000009
【図９】
0006702021.tif 000010