(57)【要約】      （修正有）【課題】プログラムの書込に関する異常を迅速に検出し得るシミュレーション装置を提供する。【解決手段】シミュレーション装置は、シミュレーション処理において、予めＲＯＭモデルの全領域に未定義コードを書き込みＳＰ２、ファームウェアを該ＲＯＭモデルにロードＳＰ５する。仮にユーザが誤ったファイル名を指定した場合、ＲＯＭモデルに未定義コードが書き込まれた状態のままファームウェア実行処理ＳＰ８を行うため、該未定義コードのフェッチ及びデコードを検知した場合に、シミュレーション処理を停止してユーザに通知する。これによりユーザは、未定義コードの検知を直ちに認識でき、さらにファームウェアのロードに失敗した可能性が高いことに容易に想到でき、直ちに適切に対処できる。【選択図】図４
2020173616.tif 000002
【特許請求の範囲】
【請求項１】
命令コードを読み込んで実行するＣＰＵ（Central Processing Unit）を模したＣＰＵモデルと、複数の前記命令コードにより構成された制御プログラムを格納する記憶部を模した記憶部モデルとを形成するモデル形成部と、
前記記憶部モデルにおける少なくとも一部の記憶領域に、前記ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込部と、
前記記憶部モデルにおける前記未定義コードが書き込まれた前記記憶領域に、ユーザに指定された前記制御プログラムを書き込む制御プログラム書込部と、
前記記憶部モデルから前記命令コードを順次読み出して前記ＣＰＵモデルにより順次実行させる命令コード実行部と
を具えることを特徴とするシミュレーション装置。
【請求項２】
前記記憶部モデルから読み出された前記命令コードが前記未定義コードであった場合、当該未定義コードが読み出されたことを前記ユーザに通知する異常処理部
をさらに具えることを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記異常処理部は、前記記憶部モデルから読み出された前記命令コードが前記未定義コードであった場合、前記命令コード実行部による前記命令コードの読出及び実行を停止させる
ことを特徴とする請求項２に記載のシミュレーション装置。
【請求項４】
前記未定義コード書込部は、前記記憶部モデルにおける、前記ＣＰＵが最初に読み出すアドレスを含む前記記憶領域に、前記未定義コードを書き込む
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項５】
前記未定義コード書込部は、前記記憶部モデルにおける、前記ＣＰＵが最初にジャンプするアドレスを含む前記記憶領域に、前記未定義コードを書き込む
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項６】
前記未定義コード書込部は、前記記憶部モデルにおける全ての前記記憶領域に前記未定義コードを書き込む
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項７】
モデル形成部により、命令コードを読み込んで実行するＣＰＵを模したＣＰＵモデルと、複数の前記命令コードにより構成された制御プログラムを格納する記憶部を模した記憶部モデルとを形成するモデル形成ステップと、
未定義コード書込部により、前記記憶部モデルにおける少なくとも一部の記憶領域に、前記ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込ステップと、
制御プログラム書込部により、前記記憶部モデルにおける前記未定義コードが書き込まれた前記記憶領域に、ユーザに指定された前記制御プログラムを書き込む制御プログラム書込ステップと、
命令コード実行部により、前記記憶部モデルから前記命令コードを順次読み出して前記ＣＰＵモデルにより順次実行させる命令コード実行ステップと
を具えることを特徴とするシミュレーション方法。
【請求項８】
命令コードを読み込んで実行するＣＰＵと、
複数の前記命令コードにより構成された制御プログラムを格納する記憶部と、
前記記憶部における少なくとも一部の記憶領域に、前記ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込部と、
前記記憶部モデルにおける前記未定義コードが書き込まれた前記記憶領域に、前記制御プログラムを書き込む制御プログラム書込部と、
前記ＣＰＵにより前記記憶部から前記制御プログラムの前記命令コードを読み出して実行する場合に、当該命令コードが前記未定義コードであった場合、前記制御プログラムの実行を停止させる停止処理、及び当該未定義コードが読み出されたことを通知する通知処理のうち少なくとも一方を行う異常処理部と
を具えることを特徴とする情報処理装置。
【請求項９】
前記記憶部は、前記制御プログラムを格納する制御プログラム記憶領域とは別に例外処理を実行するための例外処理プログラムが格納される記憶領域である例外処理プログラム記憶領域を有し、
前記未定義コード書込部は、前記例外処理プログラム記憶領域には当該未定義コードを書き込まずに前記記憶部の前記制御プログラム記憶領域に前記未定義コードを書き込み、
前記制御プログラム書込部は、前記記憶部の前記制御プログラム記憶領域に前記制御プログラムを書き込む
ことを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記異常処理部は、前記ＣＰＵとは別に構成されたエラー通報回路である
ことを特徴とする請求項８に記載の情報処理装置。
【請求項１１】
前記異常処理部は、前記記憶部から前記ＣＰＵに供給される前記命令コードをラッチし、当該命令コードが前記未定義コードであるか否かを判定する
ことを特徴とする請求項１０に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーション装置、シミュレーション方法及び情報処理装置に関し、例えばプリンタのシミュレーションを行うシミュレーション装置に適用して好適なものである。
【背景技術】
【０００２】
従来、シミュレーション装置としては、ソフトウェアを実行した場合におけるハードウェアの動作を模擬することにより、当該ソフトウェアの動作確認や解析等を行うものが広く普及している。
【０００３】
このシミュレーション装置では、例えばプリンタのシミュレーションを行う場合、当該プリンタを構成する各部分、例えば用紙を搬送する搬送部、画像を形成する画像形成部、画像を用紙に定着させる定着部、及びこれらを制御する制御部等を、それぞれモデル化する。
【０００４】
このうち制御部をモデル化した制御部モデルでは、命令コードを読み込んで実行するＣＰＵ（Central Processing Unit）、制御プログラム等の各種情報を記憶するＲＯＭ（Read Only Memory）、及び情報を一時的に格納するＲＡＭ（Random Access Memory）等をそれぞれモデル化し、ソフトウェア上で擬似的に構成する。
【０００５】
そのうえでシミュレーション装置では、制御部のモデルにおいて、複数の命令コードにより構成されたファームウェア（すなわちプログラム）をＲＯＭのモデルに格納し、当該ファームウェアの各命令コードをＣＰＵのモデルが順次読み出し、それぞれデコードして命令処理を順次実行する（例えば、特許文献１参照）。これによりシミュレーション装置は、プリンタにおいてファームウェアが正常に動作するか否かを、ソフトウェア上で容易に確認させることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−２５０１１５号公報（図１等）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところでシミュレーション装置では、ファームウェアの開発や修正が行われる場合、ファイルとして作成された複数通りのファームウェアを適宜入れ替えながら、それぞれのシミュレーション処理を行う場合がある。そこでシミュレーション装置としては、例えばユーザの操作によりファームウェアのファイルをファイル名等により指定させ、当該ファイル名と対応付けられたファームウェアをＲＯＭのモデルに書き込んでから、シミュレーション処理を開始することにより、作業の効率化を図ったものがある。
【０００８】
しかしながらユーザは、例えば頻繁にファームウェアを更新しながら、ファイル名も適宜変更しているような場合に、当該ファイルの指定を誤る場合、具体的にはファイル名そのものやファイルのパス等を誤る場合がある。このような場合、シミュレーション装置では、ＲＯＭのモデルが初期化された後にファームウェアが書き込まれていない状態、例えば各アドレスに「００Ｈ」が書き込まれた状態でシミュレーション処理を開始することになる。
【０００９】
多くの場合、命令コード「００Ｈ」は、何ら処理を行わないことを意味する「ＮＯＰ」が割り当てられている。このためシミュレーション装置では、制御部のモデルにおいて、ＣＰＵのモデルがＲＯＭのモデルにおける各アドレスから「００Ｈ」を順次読み出し、何ら処理を行わず、すなわちプリンタを何ら動作させることなく、プログラムカウンタが順次更新されていく。このような場合、シミュレーション装置を操作しているユーザは、ソフトウェア上でプリンタが動作しないため、例えばファームウェアに問題があるものと推測してその原因を探る等、無駄な作業を行う可能性がある。
【００１０】
すなわちシミュレーション装置は、ＲＯＭモデルにファームウェア等のプログラムが正常に書き込まれていない状態でシミュレーション処理を行い、正常な動作結果が得られなかった場合に、ユーザにその原因を把握させることが困難である、という問題があった。
【００１１】
本発明は以上の点を考慮してなされたもので、プログラムの書込に関する異常を迅速に検出し得るシミュレーション装置、シミュレーション方法及び情報処理装置を提案しようとするものである。
【課題を解決するための手段】
【００１２】
かかる課題を解決するため本発明のシミュレーション装置においては、命令コードを読み込んで実行するＣＰＵ（Central Processing Unit）を模したＣＰＵモデルと、複数の命令コードにより構成された制御プログラムを格納する記憶部を模した記憶部モデルとを形成するモデル形成部と、記憶部モデルにおける少なくとも一部の記憶領域に、ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込部と、記憶部モデルにおける未定義コードが書き込まれた記憶領域に、ユーザに指定された制御プログラムを書き込む制御プログラム書込部と、記憶部モデルから命令コードを順次読み出してＣＰＵモデルにより順次実行させる命令コード実行部とを設けるようにした。
【００１３】
また本発明のシミュレーション方法においては、モデル形成部により、命令コードを読み込んで実行するＣＰＵを模したＣＰＵモデルと、複数の命令コードにより構成された制御プログラムを格納する記憶部を模した記憶部モデルとを形成するモデル形成ステップと、未定義コード書込部により、記憶部モデルにおける少なくとも一部の記憶領域に、ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込ステップと、制御プログラム書込部により、記憶部モデルにおける未定義コードが書き込まれた記憶領域に、ユーザに指定された制御プログラムを書き込む制御プログラム書込ステップと、命令コード実行部により、記憶部モデルから命令コードを順次読み出してＣＰＵモデルにより順次実行させる命令コード実行ステップとを設けるようにした。
【００１４】
さらに本発明の情報処理装置においては、命令コードを読み込んで実行するＣＰＵと、複数の命令コードにより構成された制御プログラムを格納する記憶部と、記憶部における少なくとも一部の記憶領域に、ＣＰＵにおいて定義されていない未定義コードを書き込む未定義コード書込部と、記憶部モデルにおける未定義コードが書き込まれた記憶領域に、ユーザに指定された制御プログラムを書き込む制御プログラム書込部と、ＣＰＵにより記憶部から制御プログラムの命令コードを読み出して実行する場合に、当該命令コードが未定義コードであった場合、制御プログラムの実行を停止させる停止処理、及び当該未定義コードが読み出されたことを通知する通知処理のうち少なくとも一方を行う異常処理部とを設けるようにした。
【００１５】
本発明は、記憶部又は記憶部モデルに予め未定義コードを書き込んでから、制御プログラムを書き込み、ＣＰＵ又はＣＰＵモデルが記憶部又は記憶部モデルから制御プログラムの命令コードをフェッチ及びデコードして処理を実行する。このため本発明は、仮に記憶部又は記憶部モデルからフェッチ及びデコードした命令コードが未定義コードであれば、記憶部又は記憶部モデルに制御プログラムが正常に書き込まれていないことを容易に検出できる。
【発明の効果】
【００１６】
本発明によれば、プログラムの書込に関する異常を迅速に検出し得るシミュレーション装置、シミュレーション方法及び情報処理装置を実現できる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施の形態によるシミュレーション装置の構成を示す略線的ブロック図である。
【図２】プリンタモデルの構成を示す略線的ブロック図である。
【図３】モデル表示ウィンドウの構成を示す略線図である。
【図４】第１の実施の形態によるシミュレーション処理手順を示すフローチャートである。
【図５】初期化された状態におけるＲＯＭモデルのダンプデータを示す略線図である。
【図６】未定義コードを書き込んだ状態におけるＲＯＭモデルのダンプデータを示す略線図である。
【図７】ファームウェアがロードされた状態におけるROMモデルのダンプデータを示す略線図である。
【図８】第１の実施の形態によるリセット処理手順を示すフローチャートである。
【図９】第１の実施の形態によるファームウェア実行処理手順を示すフローチャートである。
【図１０】異常通知ウィンドウの表示を示す略線図である。
【図１１】従来のシミュレーション装置の構成を示す略線的ブロック図である。
【図１２】従来のシミュレーション処理手順を示すフローチャートである。
【図１３】従来のファームウェア実行処理手順を示すフローチャートである。
【図１４】第２の実施の形態によるプリンタの構成を示す略線的ブロック図である。
【図１５】第２の実施の形態による外部メモリのメモリマップ及びダンプデータを示す略線図である。
【図１６】例外処理の発生要因及び格納アドレスを示す略線図である。
【図１７】第２の実施の形態によるファームウェア更新処理手順を示すフローチャートである。
【図１８】第２の実施の形態によるリセット処理手順を示すフローチャートである。
【図１９】第２の実施の形態によるファームウェア実行処理手順を示すフローチャートである。
【図２０】未定義コード実行例外処理手順を示すフローチャートである。
【図２１】第３の実施の形態によるプリンタの構成を示す略線的ブロック図である。
【図２２】第３の実施の形態による内部ＲＡＭのメモリマップ及びダンプデータを示す略線図である。
【図２３】第３の実施の形態によるファームウェア転送処理手順を示すフローチャートである。
【図２４】第３の実施の形態によるエラー通報処理手順を示すフローチャートである。
【図２５】エラー通報処理のタイミングチャートを示す略線図である。
【発明を実施するための形態】
【００１８】
以下、発明を実施するための形態（以下実施の形態とする）について、図面を用いて説明する。
【００１９】
［１．第１の実施の形態］
［１−１．シミュレーション装置の構成］
図１に模式的なブロック図を示すように、第１の実施の形態によるシミュレーション装置１は、制御部２、記憶部３、通信部４、表示部５及び操作部６がバス８を介して相互に接続されている。このシミュレーション装置１は、ソフトウェア上でプリンタ（画像形成装置とも呼ばれる）を模したプリンタモデルを構成し、このプリンタモデルにおいてファームウェアを実行させるシミュレーション処理を行うようになっている。因みにファームウェアは、プリンタを構成する各ハードウェアをそれぞれ制御して印刷処理等の動作を行わせるためのプログラムであり、制御プログラムとも呼ばれる。
【００２０】
制御部２は、図示しないＣＰＵ（Central Processing Unit）やＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）等を有しており、該ＲＯＭや記憶部３からファームウェア等の種々のプログラムを読み出して実行することにより、その内部に複数の機能ブロックを形成して種々の処理を行う（詳しくは後述する）。
【００２１】
記憶部３は、例えばハードディスクドライブやフラッシュメモリ等でなる不揮発性の記憶媒体であり、種々の情報を記憶する。この記憶部３には、後述するシミュレーションプログラムやファームウェアのファイル等が格納されている。通信部４は、例えばＩＥＥＥ（Institute of Electrical and Electronics Engineers）８０２．３ｕ／ａｂ等の規格に準拠した有線ＬＡＮ（Local Area Network）、或いはＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎ／ａｃ等の無線ＬＡＮに準拠したインタフェースであり、所定のネットワーク（図示せず）と接続され、外部の情報処理装置（図示せず）との間で情報を相互に送受信する。
【００２２】
表示部５は、例えば液晶ディスプレイであり、文字や図形等により種々の情報を表示してユーザに提示する。操作部６は、例えばキーボードやマウス、或いはタッチパッド等であり、ユーザによる種々の入力操作を受け付ける。
【００２３】
制御部２は、記憶部３からシミュレーションプログラムを読み出して実行することにより、その内部にモデル形成部１１、モデル画像表示処理部１２、未定義コード書込部１３、制御プログラム書込部１４、命令コード実行部１５及び異常処理部１６といった複数の機能ブロックを構成する。
【００２４】
モデル形成部１１は、図２に示すように、プリンタを構成する各部分をそれぞれ擬似的に模したプリンタモデル２０を生成する。具体的にプリンタモデル２０は、大きく分けてメイン基板モデル２１、オプショントレイモデル２２及びメカモデル２３により構成されている。
【００２５】
メイン基板モデル２１は、プリンタの各部を制御するメイン基板をモデル化したものであり、ＡＳＩＣ（Application Specific Integrated Circuit）をモデル化したＡＳＩＣモデル３０を中心に構成されている。ＡＳＩＣモデル３０の内部には、ＣＰＵ、ＲＯＭ、ＲＡＭ及びゲートアレイをそれぞれモデル化したＣＰＵモデル３１、ＲＯＭモデル３２、ＲＡＭモデル３３及びゲートアレイモデル３４がそれぞれ設けられている。
【００２６】
ＣＰＵモデル３１は、その内部において演算ユニットや各種レジスタ、及びプログラムカウンタ等（何れも図示せず）をそれぞれモデル化しており、命令コードのフェッチ（取込）、デコード及び命令実行といった、実際のＣＰＵと同様の動作（振る舞い）をソフトウェア上で模擬的に実行し得るようになっている。ＲＯＭモデル３２及びＲＡＭモデル３３は、それぞれ実際のＲＯＭ及びＲＡＭと同様の記憶領域を有すると共にアドレスを割り当てており、実際のＲＯＭ及びＲＡＭと同様に動作し、各アドレスと対応付けてデータを格納し、また読み出し得るようになっている。
【００２７】
このＣＰＵモデル３１では、実際のＣＰＵと同様に、予め２バイトの命令コードが複数種類定義されており、ＲＯＭモデル３２等から読み出して取得したデータを命令コードと見なし、この命令コードに応じた処理を実行する。ただしＣＰＵモデル３１では、２５６通りがある２バイトのデータのうち、一部分のみが命令コードとして定義されており、その残りが未定義となっている。このＣＰＵモデル３１は、未定義の命令コード（以下これを未定義コードと呼ぶ）を取得した場合、実際のＣＰＵと同様に、所定のアドレスにジャンプする等の例外処理を行うようになっている。
【００２８】
ゲートアレイモデル３４は、実際のＡＳＩＣ内に形成されるゲートアレイと同様の動作（振る舞い）をソフトウェア上で実行し得るようになっている。またメイン基板モデル２１には、駆動力を発生して各部に供給するモータを制御するためのモータドライバをモデル化したモータドライバモデル３５も設けられている。
【００２９】
オプショントレイモデル２２は、プリンタに取り付け可能なオプションの用紙トレイ及びその周辺の部品であるオプショントレイをモデル化したものであり、各部を制御するマイコン（マイクロコンピュータ）をモデル化したマイコンモデル４０を中心に構成されている。マイコンモデル４０には、ＡＳＩＣモデル３０と同様にＣＰＵモデル４１、ＲＯＭモデル４２及びＲＡＭモデル４３が設けられている。またオプショントレイモデル２２には、メイン基板モデル２１と同様、モータドライバをモデル化したモータドライバモデル４４も設けられている。
【００３０】
メカモデル２３は、プリンタ内に設けられる各部のモデルが設けられている。具体的にメカモデル２３には、駆動力を発生するモータをモデル化したモータモデル５１、用紙の有無等を検知するセンサをモデル化したセンサモデル５２、円筒状に形成され、回転することにより用紙の搬送等を行うローラをモデル化したローラモデル５３が設けられている。
【００３１】
またメカモデル２３には、トナーを用いてトナー画像を形成するイメージドラム（ＩＤ）をモデル化したイメージドラム（ＩＤ）モデル５４、トナー画像が転写された用紙に熱及び圧力を加えて定着させる定着器をモデル化した定着器モデル５５も設けられている。さらにメカモデル２３には、用紙を搬送する用紙搬送路をモデル化した用紙搬送路モデル５７、及び用紙をモデル化した用紙モデル５８も設けられている。
【００３２】
制御部２（図１）のモデル画像表示処理部１２は、モデル形成部１１により形成したプリンタモデル２０（図２）における各部の動作や状態に基づき、図３に示すように、当該プリンタの状態や動作等を画像として表したモデル表示ウィンドウ６０を表示部５に表示させる。
【００３３】
モデル表示ウィンドウ６０には、プリンタ本体を模式的に表すプリンタ本体部６１が設けられている。プリンタ本体部６１には、用紙Ｐを収納する用紙トレイ６２が設けられており、またオプションとしてプリンタ本体部６１に取り付けることにより用紙トレイを増設するオプショントレイ６３が取り付けられている。さらにプリンタ本体部６１には、用紙Ｐを搬送する用紙搬送路６４、用紙Ｐに駆動力を伝達するローラ６５、用紙Ｐを検出する用紙センサ６６、トナー画像を形成するイメージドラム６７、及びトナー画像が転写された用紙Ｐに熱及び圧力を加える定着器６８がそれぞれ設けられている。
【００３４】
シミュレーション装置１においてシミュレーション処理を行う場合、モデル表示ウィンドウ６０では、プリンタ本体部６１、用紙トレイ６２及びオプショントレイ６３における各部の動作に応じて画像の各部を適宜変化させる。例えばモデル表示ウィンドウ６０は、用紙Ｐの位置を搬送路に沿って順次変化させる。またモデル表示ウィンドウ６０におけるプリンタ本体部６１の下側には、文字により各部の状態を表す状態表示部６９が設けられている。状態表示部６９は、例えば定着器における動作状態や、各センサによる用紙Ｐの検出結果等を、それぞれ文字により表示している。
【００３５】
これによりモデル表示ウィンドウ６０は、シミュレーション処理においてプリンタの各部が動作する様子を、画像や文字によりユーザに提示することができる。
【００３６】
制御部２（図１）の未定義コード書込部１３は、後述する未定義コードを、モデル形成部１１により形成したＲＯＭモデル３２（図２）に書き込む（詳しくは後述する）。制御プログラム書込部１４（図１）は、記憶部３に格納されている制御プログラム、すなわちプリンタを動作させるためのファームウェアを読み出し、ＲＯＭモデル３２（図２）に書き込む。命令コード実行部１５（図１）は、ＣＰＵモデル３１（図２）により、命令コードの実行、具体的にはＲＯＭモデル３２からの命令コードのフェッチ（読出）、デコード及び命令実行といった各処理を行わせる。異常処理部１６は、異常を検出した場合に所定の異常対応処理を行う（詳しくは後述する）。
【００３７】
このようにシミュレーション装置１は、シミュレーション処理において、ソフトウェア上にプリンタを構成する各部をそれぞれモデル化し、ＲＯＭモデル３２に格納したファームウェアの各命令コードを順次読み出してＣＰＵモデル３１により実行することにより、プリンタの動作をシミュレートする。
【００３８】
［１−２．シミュレーション処理］
次に、シミュレーション装置１におけるシミュレーション処理の実行について説明する。シミュレーション装置１の制御部２は、ユーザからシミュレーション処理を開始する指示として、例えばコマンドラインにおいてシミュレーションプログラムの実行ファイルを表すファイル名が入力されると、記憶部３からシミュレーションプログラムを読み出して実行する。これにより制御部２は、図１に示した各機能ブロックを内部に形成した上で、図４に示すシミュレーション処理手順ＲＴ１を開始し、最初のステップＳＰ１に移る。
【００３９】
ステップＳＰ１において制御部２は、モデル形成部１１（図１）により、プリンタモデル２０（図２）を形成すると共に、モデル画像表示処理部１２（図１）により、モデル表示ウィンドウ６０（図３）を表示部５（図１）に表示させて、次のステップＳＰ２に移る。
【００４０】
このときプリンタモデル２０の各部は、新たに生成された直後であるため、各部が初期状態となっている。例えばメイン基板モデル２１におけるＣＰＵモデル３１の各レジスタ（図示せず）等は、全て初期化された状態となる。またＲＯＭモデル３２は、図５にダンプデータを示すように、全てのアドレスにおいて値「００Ｈ」となっている。この値「００Ｈ」は、ＣＰＵモデル３１の命令コードにおいて、何も処理を行わないことを意味する「ＮＯＰ」として定義されている。
【００４１】
ステップＳＰ２において制御部２は、未定義コード書込部１３（図１）により、プリンタモデル２０（図２）におけるＲＯＭモデル３２の全領域に、未定義コードである「Ａ５Ｈ」を書き込み、次のステップＳＰ３に移る。これによりＲＯＭモデル３２は、図６にダンプデータを示すように、ＲＯＭモデル３２における全てのアドレスに未定義コードである「Ａ５Ｈ」が書き込まれた状態となる。
【００４２】
ステップＳＰ３において制御部２は、ファームウェアをロードする指示、すなわち記憶部３（図１）にファイルとして格納されているファームウェアを読み出してＲＯＭモデル３２に書き込む指示をユーザから受け付けたか否かを判定する。この場合、制御部２は、例えばコマンドラインにおいてシミュレーションプログラムの実行ファイルを表すファイル名が入力された際に、引数としてファームウェアのファイル名が指定されていれば、ファームウェアをロードする指示を受け付けたものと見なす。ここで肯定結果が得られると、制御部２は次のステップＳＰ４に移る。
【００４３】
ステップＳＰ４において制御部２は、記憶部３からファームウェアのファイルを正常に読み出したか否かを判定する。ここで肯定結果が得られると、制御部２は次のステップＳＰ５に移る。
【００４４】
ステップＳＰ５において制御部２は、制御プログラム書込部１４（図１）により、記憶部３から読み出したファームウェア（制御プログラム）のファイルをＲＯＭモデル３２に順次書き込む処理、すなわちローディングを行い、次のステップＳＰ６に移る。これによりＲＯＭモデル３２には、図７にダンプデータを示すように、ファームウェアを構成する各命令コードが、ＲＯＭモデル３２における開始アドレスから順次書き込まれた状態となる。換言すれば、このときファームウェアの各命令コードは、未定義コードに上書きされていくことになる。因みにＲＯＭモデル３２では、ファームウェアの容量が該ＲＯＭモデル３２の記憶容量よりも小さい場合、最上位のアドレス近傍等において、ファームウェアの書込終了後も未定義コードが一部残った状態となる。
【００４５】
因みにプリンタモデル２０では、図６に示したアドレス０ｘ００００００００からの４バイトが、リセット処理が行われた直後にジャンプするべきアドレスであるベクタアドレスＡＤＶを表している。図６では、一例として、リセット時のベクタアドレスＡＤＶがアドレス「１００００Ｈ」である状態を表している。すなわちＣＰＵモデル３１は、リセット処理が行われた場合、アドレス０ｘ００００００００から４バイト分のデータをベクタアドレスＡＤＶと見なし、これらを読み出してプログラムカウンタにセットすることにより、このベクタアドレスにジャンプして処理を継続することになる。
【００４６】
一方、ステップＳＰ３において否定結果が得られると、このことはファームウェアをロードする必要が無いことを表している。このとき制御部２は、次のステップＳＰ６に移る。また制御部２は、ステップＳＰ４において否定結果が得られた場合、すなわちユーザからファームウェアをロードする指示を受け付けたものの、当該ファームウェアを正常に読み出し得なかった場合にも、ステップＳＰ６に移る。これは、例えばユーザがファームウェアのファイル名やパス名を誤って指定していた場合等が該当する。この場合、ＲＯＭモデル３２は、ステップＳＰ２において未定義コードが書き込まれた状態（図６）のままとなる。
【００４７】
ステップＳＰ６において制御部２は、リセットの指示を受け付けたか否かを判定する。このとき制御部２は、例えば、ユーザからコマンドラインにおいて所定の引数が含まれていれば、これをリセットの指示として受け付ける。また制御部２は、ステップＳＰ３等においてファームウェアのロードが指示されていた場合にも、リセットの指示を受け付けたものと見なす。ここで肯定結果が得られると、制御部２は次のステップＳＰ７に移る。
【００４８】
ステップＳＰ７において制御部２は、リセット処理をサブルーチンとして実行する。具体的に制御部２は、記憶部３（図１）からリセットプログラムを読み出して実行することにより、図８に示すリセット処理手順ＲＴ２を開始してステップＳＰ１１に移る。
【００４９】
ステップＳＰ１１において制御部２は、リセット信号をイネーブルに切り替え、次のステップＳＰ１２に移る。ここでリセット信号とは、種々の値の初期化のような、プリンタを最初から動作させるための一連の処理（以下これをリセット処理と呼ぶ）が行われている間にイネーブル状態となり、このリセット処理が終了するとディスエーブル状態になる信号である。
【００５０】
ステップＳＰ１２において制御部２は、ＣＰＵモデル３１における各レジスタ（図示せず）や出力信号等をそれぞれ初期化し、次のステップＳＰ１３に移る。ステップＳＰ１３において制御部２は、プログラムを開始するアドレスとして、所定のベクタアドレス（例えば００００００００Ｈ）をプログラムカウンタに設定し、次のステップＳＰ１４に移る。
【００５１】
ステップＳＰ１４において制御部２は、リセットが解除されたか否か、具体的にはリセット信号がディスエーブル状態になったか否かを判定する。ここで否定結果が得られると、制御部２はこのステップＳＰ１４を繰り返すことにより、リセット信号がディスエーブル状態に切り替わるのを待ち受ける。
【００５２】
一方、ステップＳＰ１４において肯定結果が得られると、制御部２は次のステップＳＰ１５に移り、リセット処理手順ＲＴ２を終了して元のシミュレーション処理手順ＲＴ１（図４）におけるステップＳＰ７に戻り、その次のステップＳＰ８に移る。また制御部２は、ステップＳＰ６において否定結果が得られると、初期化処理を行うことなく、次のステップＳＰ８に移る。
【００５３】
ステップＳＰ８において制御部２は、ファームウェア実行処理をサブルーチンとして実行する。具体的に制御部２は、記憶部３（図１）からファームウェア実行プログラムを読み出して実行することにより、図９に示すファームウェア実行処理手順ＲＴ３を開始してステップＳＰ２１に移る。
【００５４】
ステップＳＰ２１において制御部２は、命令コード実行部１５（図１）により、ＲＯＭモデル３２におけるプログラムカウンタ（図示せず）が示すアドレスから命令コードをフェッチして、すなわち取り出して、次のステップＳＰ２２に移る。ステップＳＰ２２において制御部２は、命令コード実行部１５（図１）により、フェッチした命令コードをデコードし、次のステップＳＰ２３に移る。
【００５５】
ステップＳＰ２３において制御部２は、命令コード実行部１５（図１）により、命令コードが未定義コードであるか否かを判定する。ここで否定結果が得られると、このことは当該命令コードが未定義コードでは無く、予め定義された何れかの命令コードであることを表している。またこのことは、ＲＯＭモデル３２における現在のアドレスに関して、ステップＳＰ２（図４）において未定義コードが書き込まれた後に、ステップＳＰ５においてファームウェアが正常に書き込まれたことを表している。このとき制御部２は、次のステップＳＰ２４に移る。
【００５６】
ステップＳＰ２４において制御部２は、命令コード実行部１５（図１）により、命令コードに応じた処理に分岐し、続くステップＳＰ２５において命令コードに応じた命令処理を実行し、その次のステップＳＰ２６に移る。ステップＳＰ２６において制御部２は、プログラムカウンタを更新した後、再度ステップＳＰ２１に戻る。これにより制御部２は、次のアドレスに関して一連の処理を繰り返す。
【００５７】
一方、ステップＳＰ２３において肯定結果が得られると、このことは命令コードが未定義コードであることから、ＲＯＭモデル３２における現在のアドレスに関して、ステップＳＰ２（図４）において未定義コードが書き込まれた後に、ステップＳＰ５によりファームウェアが正常に書き込まれなかったことを意味している。またこのことは、ＲＯＭモデル３２に対しファームウェアの少なくとも一部が正常に書き込まれていないため、現状のシミュレーション装置１では当該ファームウェアの動作確認を正しく行い得ないことを表している。このとき制御部２は、次のステップＳＰ２７に移る。
【００５８】
ステップＳＰ２７において制御部２は、異常処理部１６（図２）により、シミュレーションを停止させ、次のステップＳＰ２８に移る。ステップＳＰ２８において制御部２は、異常処理部１６（図２）により、図１０に示すように、モデル表示ウィンドウ６０の手前側に重ねるようにして、異常通知ウィンドウ８０を表示部５（図１）に表示させ、次のステップＳＰ２９に移る。
【００５９】
この異常通知ウィンドウ８０には、例えば「ＥＲＲＯＲ」、「未定義命令コードをデコードしました。」及び「シミュレーションを停止しました。」といったメッセージが表示される。このため、この異常通知ウィンドウ８０を目視したユーザは、未定義命令コードがデコードされたこと、及びこれに伴ってシミュレーション処理が停止されたことを直ちに把握できる。
【００６０】
ステップＳＰ２９において制御部２は、ファームウェア実行処理手順ＲＴ３を終了して元のシミュレーション処理手順ＲＴ１（図４）におけるステップＳＰ８に戻り、その次のステップＳＰ９に移って当該シミュレーション処理手順ＲＴ１も終了する。
【００６１】
［１−３．効果等］
以上の構成において、第１の実施の形態によるシミュレーション装置１では、シミュレーション処理の開始直後に、ＲＯＭモデル３２の全領域に未定義コードを書き込むようにした（図４及び図６）。
【００６２】
ここで、シミュレーション装置１と比較するために、従来のシミュレーション装置１０１について説明する。図１と対応する図１１に示すように、従来のシミュレーション装置１０１は、本実施の形態によるシミュレーション装置１と比較して、制御部２に代わる制御部１０２を有している。制御部１０２は、制御部２（図１）と比較して、未定義コード書込部１３及び異常処理部１６が省略されている点において相違するものの、他の点については同様に構成されている。
【００６３】
従来のシミュレーション装置１０１の制御部１０２は、シミュレーション処理を実行する場合、本実施の形態によるシミュレーション処理手順ＲＴ１（図４）に代えて、従来のシミュレーション処理手順ＲＴ１１（図１２）を実行する。
【００６４】
従来のシミュレーション処理手順ＲＴ１１は、シミュレーション処理手順ＲＴ１（図４）と比較して、一部が同様に構成されているものの、ステップＳＰ２に相当する処理が省略されており、またステップＳＰ１１７において、サブルーチンとして図１３に示す従来のファームウェア実行処理手順ＲＴ１２を実行するようになっている。従来のファームウェア実行処理手順ＲＴ１２（図１３）は、ファームウェア実行処理手順ＲＴ３（図９）と比較して、一部が同様に構成されているものの、ステップＳＰ２３、ＳＰ２７、ＳＰ２８及びＳＰ２９に相当する処理が省略されている。
【００６５】
このため、従来のシミュレーション装置１０１では、仮にユーザが誤ったファイル名を指定していた場合、従来のシミュレーション処理手順ＲＴ１１（図１２）のステップＳＰ１１３において否定結果となり、ステップＳＰ１１５以降の処理を実行する。そうすると従来のシミュレーション装置１０１は、ＲＯＭモデル３２をステップＳＰ１１１において初期化した状態（図５）、すなわち全領域に「００Ｈ」が格納された状態のまま、ステップＳＰ１１７においてファームウェア実行処理を行うことになる。
【００６６】
この場合、従来のシミュレーション装置１０１は、従来のファームウェア実行処理手順ＲＴ１２（図１３）において、ＲＯＭモデル３２の各アドレスから命令コード「００Ｈ」を順次読み出し、何も処理を行わない、といった一連の処理を繰り返す。これに伴い、従来のシミュレーション装置１０１は、プリンタモデル２０（図２）において何ら動作を行わないことになり、モデル表示ウィンドウ６０（図３）の表示を変更せずにそのまま表示し続ける。この場合、従来のシミュレーション装置１０１を操作していたユーザは、プリンタモデル２０が正常に動作していないことは認識し得るものの、その原因が何であるかを直ちに把握することができず、原因究明のための作業を行う必要があった。
【００６７】
これに対し、本実施の形態によるシミュレーション装置１では、シミュレーション処理手順ＲＴ１（図４）のステップＳＰ２において、ＲＯＭモデル３２の全領域に未定義コードを書き込んでいる（図６）。このためシミュレーション装置１では、仮にユーザが誤ったファイル名を指定していた場合、シミュレーション処理手順ＲＴ１（図４）のステップＳＰ４において否定結果となり、ステップＳＰ６以降の処理を実行する。そうするとシミュレーション装置１は、ＲＯＭモデル３２をステップＳＰ２において未定義コードが書き込まれた状態（図６）、すなわち全領域に「Ａ５Ｈ」が格納された状態のまま、ステップＳＰ８においてファームウェア実行処理を行うことになる。
【００６８】
この場合、シミュレーション装置１の制御部２は、ファームウェア実行処理手順ＲＴ３（図９）において、まずＲＯＭモデル３２のベクタアドレスＡＤＶに格納されているアドレスが「Ａ５Ａ５Ａ５Ａ５Ｈ」であるために、これをプログラムカウンタにセットする。続いて制御部２は、アドレス「Ａ５Ａ５Ａ５Ａ５Ｈ」から未定義コード「Ａ５Ｈ」を読み出すため、ステップＳＰ２３において肯定結果が得られ、ステップＳＰ２７及びＳＰ２８において、シミュレーションを停止すると共に異常通知ウィンドウ８０（図１０）を表示部５に表示させる。
【００６９】
これにより、シミュレーション装置１を操作していたユーザは、未定義コードがデコードされたことを直ちに認識でき、さらにこのことからファームウェアのロードに失敗した可能性が高いこと、すなわちファイル名の指定に誤りがあった可能性が高いことに容易に想到でき、ファイル名の指定を修正する等、直ちに適切に対処できる。これを換言すれば、このときユーザは、ファームウェアに未定義コード（すなわちバグ）が含まれていた可能性を相対的に低いものと捉えることができるため、ファームウェアの内容確認のような手間を要する作業を後回しにすることで、短時間で問題の原因を解消することが可能となる。
【００７０】
またシミュレーション装置１では、ＲＯＭモデル３２から未定義コードを取り出してデコードした段階で、シミュレーションの停止及び異常通知ウィンドウ８０（図１０）の表示を行うことができる（図９）。このためシミュレーション装置１では、シミュレーション処理を停止させるための各レジスタ等の条件を綿密に設定する必要が無く、ユーザに余分な手間をかけさせる必要が無い。
【００７１】
さらにシミュレーション装置１では、ＲＯＭモデル３２から取り出してデコードした命令コードが未定義コードであるか否かを基に、シミュレーションの停止及び異常通知ウィンドウ８０（図１０）の表示を行うようにした。このためシミュレーション装置１は、未定義コードを検知するための仕組みをプリンタモデル２０に組み込む必要が無く、該プリンタモデル２０やＣＰＵモデル３１等において、実際のプリンタやＣＰＵ等と同様の動作を行わせることによる高精度な検証を行うことができる。
【００７２】
これに加えてシミュレーション装置１では、シミュレーション処理手順ＲＴ１（図４）のステップＳＰ２において、ＲＯＭモデル３２の全領域に未定義コードを書き込むようにした。このためシミュレーション装置１では、仮に記憶部３に格納されていたファームウェアのファイルが途中から破損しており、一部のみが正常にローディングできていなかった場合であっても、未定義コードをフェッチ及びデコードした時点で、ファームウェアが正常に書き込まれていないことを検出できる。
【００７３】
以上の構成によれば、第１の実施の形態によるシミュレーション装置１は、シミュレーション処理において、予めＲＯＭモデル３２の全領域に未定義コードを書き込んでから、ファームウェアを該ＲＯＭモデル３２にロードする処理を行うようにした。シミュレーション装置１は、仮にユーザが誤ったファイル名を指定した場合、ＲＯＭモデル３２に未定義コードが書き込まれた状態のままファームウェア実行処理を行うため、該未定義コードのフェッチ及びデコードを検知した場合に、シミュレーション処理を停止してユーザに通知する。これによりユーザは、未定義コードの検知を直ちに認識でき、さらにファームウェアのロードに失敗した可能性が高いことに容易に想到でき、直ちに適切に対処できる。
【００７４】
［２．第２の実施の形態］
［２−１．画像形成装置の構成］
図１４に模式的なブロック図を示すように、第２の実施の形態によるプリンタ２０１は、制御基板２０２に操作パネル２０３、搬送部２０５、画像形成部２０６及び定着部２０７等が接続されている。因みに、実際のプリンタ２０１は、画像形成装置とも呼ばれており、図３のモデル表示ウィンドウ６０に画像として表示されたプリンタ本体部６１と類似した構成となっている。
【００７５】
制御基板２０２には、ＡＳＩＣ２１１及び外部メモリ２１２が設けられている。ＡＳＩＣ２１１の内部では、ＣＰＵ２２１、外部メモリコントローラ２２２、インタフェース（Ｉ／Ｆ）コントローラ２２３、内部ＲＡＭ２２４及び操作パネルコントローラ２２５が内部バス２２８を介して相互に接続されている。
【００７６】
ＣＰＵ２２１は、第１の実施の形態におけるＣＰＵモデル３１と対応しているものの、ソフトウェア上のモデルでは無く、半導体素子等の組合せにより構成された実際のＣＰＵであり、その内部に演算ユニットや各種レジスタ、及びプログラムカウンタ等（何れも図示せず）を有している。
【００７７】
外部メモリコントローラ２２２は、外部メモリ２１２と接続されている。外部メモリ２１２は、例えばフラッシュメモリであり、所定のアドレスが割り当てられており、種々のプログラムやデータ等を記憶することができる。外部メモリコントローラ２２２は、外部メモリ２１２にアクセスすることにより該外部メモリ２１２から種々のプログラムやデータ等を読み出すことや書き込むことができる。
【００７８】
インタフェースコントローラ２２３は、例えばＩＥＥＥ８０２．３ａｂ／ｕ等の規格に準拠した有線ＬＡＮの物理インタフェースであり、制御基板２０２上に設けられたコネクタ２０２Ｃを介して、図示しないコンピュータ装置等の上位装置と接続される。このためインタフェースコントローラ２２３は、例えば上位装置から命令やデータを受信してこれをＣＰＵ２２１に供給することができる。内部ＲＡＭ２２４は、種々のプログラムやデータ等を記憶することができる。
【００７９】
操作パネルコントローラ２２５は、操作パネル２０３と接続されている。操作パネル２０３は、例えば液晶パネルにタッチセンサが組み込まれてなるタッチパネルや、ＬＥＤ等でなる表示ランプ、及び各種操作ボタン等により構成されている。操作パネル２０３は、操作パネルコントローラ２２５の制御に基づき、タッチパネルに種々の情報を表示し得ると共に、ユーザによるタッチ操作や操作ボタンの押下操作等を受け付けることができる。
【００８０】
またＣＰＵ２２１は、第１の実施の形態におけるＣＰＵモデル３１と同様、予め２バイトの命令コードが複数種類定義されており、外部メモリ２１２等から読み出して取得したデータを命令コードと見なし、この命令コードに応じた処理を実行する。さらにＣＰＵ２２１では、やはり第１の実施の形態と同様、２５６通りがある２バイトのデータのうち、一部分のみが命令コードとして定義されており、その残りが未定義となっている。ＣＰＵ２２１は、未定義の命令コード（すなわち未定義コード）を取得した場合、第１の実施の形態と同様、所定のアドレスにジャンプする等の例外処理を行うようになっている。
【００８１】
ところで外部メモリ２１２は、図１５（Ａ）に模式的なメモリマップを示すように、大きく分けて、アドレスの先頭側からベクタアドレス格納エリアＡＲ１、例外処理プログラムエリアＡＲ２、及びその他のプログラムエリアＡＲ３が設けられている。
【００８２】
ベクタアドレス格納エリアＡＲ１は、複数の例外処理に応じたそれぞれのプログラム（以下これを例外処理プログラムと呼ぶ）におけるそれぞれの先頭アドレス（すなわちベクタアドレス）が格納されたテーブルとなっている。プリンタ２０１では、例えば図１６に示すように、例外処理の要因と、例外処理プログラムの先頭アドレスが格納された格納アドレスとが、予め対応付けられている。
【００８３】
例外処理プログラムエリアＡＲ２（図１５）は、発生要因がリセット以外である例外処理プログラムがそれぞれ格納されている。その他のプログラムエリアＡＲ３は、ファームウェア（すなわち制御プログラム）等、各種プログラムが格納される。発生要因がリセットである場合のベクタアドレスは、その他のプログラムエリアＡＲ３内のアドレスが格納されている。説明の都合上、以下では、例外処理プログラムエリアＡＲ２を例外処理プログラム記憶領域とも呼び、またその他のプログラムエリアＡＲ３を制御プログラム記憶領域とも呼ぶ。
【００８４】
このような構成により、ＣＰＵ２２１は、仮にリセット以外の例外処理が発生した場合、ベクタアドレス格納エリアＡＲ１における、当該例外処理の発生要因に応じた格納アドレスから、例外処理プログラムの先頭アドレスを読み出してプログラムカウンタにセットする。これによりＣＰＵ２２１は、当該先頭アドレス（すなわち例外処理プログラムエリアＡＲ２内）にジャンプし、当該例外処理プログラムを実行する。
【００８５】
またＣＰＵ２２１は、仮にリセットが発生した場合、ベクタアドレス格納エリアＡＲ１におけるリセットの格納アドレスから、例外処理プログラムの先頭アドレスを読み出してプログラムカウンタにセットする。これによりＣＰＵ２２１は、当該アドレス（すなわちその他のプログラムエリアＡＲ３内）にジャンプし、命令コードを順次読み出して実行する。
【００８６】
さらにプリンタ２０１では、ファームウェアを更新する場合、外部メモリ２１２のうちベクタアドレス格納エリアＡＲ１及び例外処理プログラムエリアＡＲ２内をそのまま残し、その他のプログラムエリアＡＲ３内のみを更新するようになっている。このためプリンタ２０１は、仮にファームウェアの更新処理に失敗し、その他のプログラムエリアＡＲ３内にファームウェアが格納されていない状態であったとしても、ベクタアドレス格納エリアＡＲ１及び例外処理プログラムエリアＡＲ２において、各ベクタアドレスの読み出しや各例外処理プログラムの実行が可能となっている。
【００８７】
［２−２．ファームウェア更新処理］
次に、プリンタ２０１においてファームウェア（制御プログラム）を更新する処理について説明する。プリンタ２０１のＣＰＵ２２１（図１４）は、外部メモリコントローラ２２２を介して外部メモリ２１２から所定の更新プログラムを読み出して実行することにより、図１７に示すファームウェア更新処理手順ＲＴ２１を開始して最初のステップＳＰ２１１に移る。
【００８８】
ステップＳＰ２１１においてＣＰＵ２２１は、初期化処理を行い、次のステップＳＰ２１２に移る。このときＣＰＵ２２１は、初期化処理として、例えば新たなファームウェアを書き込む際の先頭アドレスを、その他のプログラムエリアＡＲ３の先頭アドレスに設定する等の処理を行う。
【００８９】
ステップＳＰ２１２においてＣＰＵ２２１は、その他のプログラムエリアＡＲ３の全領域に、例えば「Ａ５Ｈ」のような未定義コードを書き込み、次のステップＳＰ２１３に移る。これによりその他のプログラムエリアＡＲ３は、例えば図１５（Ｃ）にダンプデータを示すように、各アドレスに未定義コード「Ａ５Ｈ」が書き込まれた状態となる。
【００９０】
ステップＳＰ２１３においてＣＰＵ２２１は、インタフェースコントローラ２２３及びコネクタ２０２Ｃを介して、図示しない上位装置から新たなファームウェアをローディングし（すなわち受信し）、次のステップＳＰ２１４に移る。
【００９１】
ステップＳＰ２１４においてＣＰＵ２２１は、ローディングした新たなファームウェアを、その他のプログラムエリアＡＲ３内における、ステップＳＰ２１１において設定された先頭アドレスから順次書き込み、次のステップＳＰ２１５に移る。このときＣＰＵ２２１は、ステップＳＰ２１２において各アドレスに書き込まれた未定義コード「Ａ５Ｈ」にそれぞれ上書きするようにして、新たなファームウェアの各命令コードを書き込んでいく。
【００９２】
このためプリンタ２０１は、仮に新たなファームウェアを外部メモリ２１２に書き込む途中で電源が切断された場合や、上位装置から新たなファームウェアを途中までしか取得できなかった場合等に、外部メモリ２１２におけるその他のプログラムエリアＡＲ３内に、未定義コード「Ａ５Ｈ」が残ったままの状態となる。
【００９３】
ステップＳＰ２１５においてＣＰＵ２２１は、リセット処理をサブルーチンとして実行する。具体的にＣＰＵ２２１は、図１８に示すリセット処理手順ＲＴ２２を開始してステップＳＰ２２１に移る。ステップＳＰ２２１においてＣＰＵ２２１は、各レジスタ（図示せず）や出力信号等をそれぞれ初期化し、次のステップＳＰ２２２に移る。
【００９４】
ステップＳＰ２２２においてＣＰＵ２２１は、プログラムを開始するアドレスとして、リセットの割込処理における開始アドレスが格納されているアドレス「００００Ｈ」（図１６）から開始アドレス「０００００８００Ｈ」を読み出し、これをプログラムカウンタに設定する。その後、ＣＰＵ２２１は、次のステップＳＰ２２３に移ってリセット処理手順ＲＴ２２を終了する。
【００９５】
その後、ＣＰＵ２２１は、プログラムカウンタに設定されたリセット後の開始アドレスである「０００００８００Ｈ」から命令コードを順次読み出すことにより、ファームウェアの実行を開始する。因みにＣＰＵ２２１は、ファームウェアの更新中に電源が切断された後、再び電源が投入された場合も、リセット処理を行う。
【００９６】
具体的にＣＰＵ２２１は、図１９に示すファームウェア実行処理手順ＲＴ２３を開始してステップＳＰ２３１に移る。ステップＳＰ２３１においてＣＰＵ２２１は、外部メモリ２１２におけるプログラムカウンタが示すアドレスから命令コードをフェッチして、すなわち取り出して、次のステップＳＰ２３２に移る。
【００９７】
ステップＳＰ２３２〜ＳＰ２３６において、ＣＰＵ２２１は、第１の実施の形態におけるファームウェア実行処理手順ＲＴ３（図９）のステップＳＰ２１〜ＳＰ２６とそれぞれ同様の処理を実行する。
【００９８】
このうちステップＳＰ２３３において否定結果が得られると、このことはステップＳＰ２３２においてデコードした命令コードが未定義コードでは無く、予め定義された何れかの命令コードであることを表している。またこのことは、外部メモリ２１２における現在のアドレスに関して、ステップＳＰ２１２（図１７）において未定義コードが書き込まれた後に、ステップＳＰ２１４においてファームウェアが正常に書き込まれたことを表している。このときＣＰＵ２２１は、ステップＳＰ２３４〜ＳＰ２３５において命令コードに応じた処理を実行する。
【００９９】
一方、ステップＳＰ２３３において肯定結果が得られると、このことは命令コードが未定義コードであることから、外部メモリ２１２における現在のアドレスに関して、ステップＳＰ２１２（図１７）において未定義コードが書き込まれた後に、ステップＳＰ２１４によりファームウェアが正常に書き込まれなかったことを意味している。またこのことは、外部メモリ２１２に対しファームウェアの少なくとも一部が正常に書き込まれていないため、プリンタ２０１が正常に動作し得ないことを表している。このときＣＰＵ２２１は、次のステップＳＰ２３７に移る。
【０１００】
ステップＳＰ２３７においてＣＰＵ２２１は、に起因したベクタアドレス格納エリアＡＲ１における「未定義コード実行」の格納アドレス、例えば「０００８Ｈ−０００ＢＨ」から、例外処理プログラムの先頭アドレスを読み出してプログラムカウンタにセットする。
【０１０１】
因みに、未定義コード実行の例外処理プログラムは、上述したように、例外処理プログラムエリアＡＲ２（図１５）内に格納されており、ファームウェアの更新時にも書き換えが行われないため、該ファームウェアの書き込みに失敗した場合であっても、外部メモリ２１２に格納されたままとなっている。
【０１０２】
これによりＣＰＵ２２１は、サブルーチンとして、図２０に示す未定義コード実行例外処理手順ＲＴ２４を開始してステップＳＰ２４１に移る。ステップＳＰ２４１においてＣＰＵ２２１は、操作パネルコントローラ２２５（図１４）を制御することにより、操作パネル２０３のタッチパネルに所定のエラー表示画面を表示させる。
【０１０３】
このエラー表示画面には、第１の実施の形態における異常通知ウィンドウ８０（図１０）と同様に、エラーが発生したこと、及び未定義コードをデコードしたこと等がテキストや図形等により表示される。その後、ＣＰＵ２２１は、次のステップＳＰ２４２に移って未定義コード実行例外処理手順ＲＴ２４を終了する。
【０１０４】
［２−３．効果等］
以上の構成において、第２の実施の形態によるプリンタ２０１は、外部メモリ２１２にベクタアドレス格納エリアＡＲ１、例外処理プログラムエリアＡＲ２及びその他のプログラムエリアＡＲ３を設け（図１５）、ファームウェアの更新時にその他のプログラムエリアＡＲ３のみを書き換えるようにした。
【０１０５】
そのうえでプリンタ２０１は、ファームウェアの更新時に、その他のプログラムエリアＡＲ３内の全領域に未定義コードを書き込んでから、新たなファームウェアを書き込み、その後にリセット処理を行うようにした。
【０１０６】
このためプリンタ２０１は、仮に新たなファームウェアの書き込みに失敗した場合、外部メモリ２１２のその他のプログラムエリアＡＲ３内における少なくとも一部のアドレスに、未定義コードが残っている状態となる。
【０１０７】
例えば、図１５に示したように、アドレス「０００００８００Ｈ」は、ファームウェア更新処理手順ＲＴ２１（図１７）のステップＳＰ２１２において未定義コード「Ａ５Ｈ」が書き込まれた後、ステップＳＰ２１４において新たなファームウェアの命令コードが書き込まれず、この未定義コード「Ａ５Ｈ」がそのまま残された状態となっている。
【０１０８】
この場合、プリンタ２０１のＣＰＵ２２１は、ファームウェア実行処理手順ＲＴ２３（図１９）において、まずベクタアドレス格納エリアＡＲ１のうちリセットが発生要因である例外処理の格納アドレスが「００００Ｈ−０００３Ｈ」であるため（図１６）、プログラムカウンタにアドレス「０００００８００Ｈ」がセットされている（図１５）。
【０１０９】
次にＣＰＵ２２１は、このアドレス「０００００８００Ｈ」から未定義コード「Ａ５Ｈ」をフェッチしてデコードし、ステップＳＰ２３３において肯定結果が得られ、ステップＳＰ２３７において未定義コード実行例外処理手順ＲＴ２４（図２０）を実行し、所定のエラー表示画面を操作パネル２０３のタッチパネルに表示させることができる。
【０１１０】
この結果、プリンタ２０１は、ファームウェアの更新処理に失敗し、外部メモリ２１２のその他のプログラムエリアＡＲ３内にファームウェアが適切に格納されていなかった場合、エラー表示画面を操作パネル２０３に表示することで、ユーザに対し該ファームウェアが正常に書き込まれていないことを認識させることができる。
【０１１１】
これによりプリンタ２０１は、ユーザに対し、電源の切断やファームウェアの再更新、或いはサービスマンの手配等、正常な状態に復旧させるための適切な処置を行わせることができるので、ＣＰＵ２２１が暴走した状態を継続することによるハードウェアへのダメージを未然に防止できる。
【０１１２】
換言すれば、第２の実施の形態によるプリンタ２０１では、第１の実施の形態によるシミュレーション装置１と同様、ファームウェアの書き込みや更新を行う前に、予め未定義コードを書き込んでおくことにより、当該未定義コードをデコードしたか否かを基に、当該ファームウェアの書込や更新に失敗したか否かを容易に判別することができる。
【０１１３】
またプリンタ２０１は、ファームウェアを更新する際に、外部メモリ２１２を全て書き換えるのではなく、その他のプログラムエリアＡＲ３内のみを書き換えるようにした。これによりプリンタ２０１は、ファームウェアの更新処理中であってもベクタアドレスや例外処理プログラムを維持でき、当該ファームウェアの更新に失敗した場合にも、残っているベクタアドレスや例外処理プログラムを利用して、ユーザへの通知等を行うことができる。
【０１１４】
他の観点から見れば、プリンタ２０１は、その他のプログラムエリアＡＲ３内にファームウェアが書き込まれていない状態であっても、ベクタアドレス格納エリアＡＲ１及び例外処理プログラムエリアＡＲ２の記憶内容を利用することで、エラー表示画面の表示を行うことができる。このためプリンタ２０１では、ＣＰＵ２２１を監視する専用のハードウェアを別途設ける必要が無く、一般的な構成でなるＡＳＩＣ２１１をそのまま利用でき、設計や動作検証等に要するコストを抑えることができる。
【０１１５】
その他の点においても、第２の実施の形態では、第１の実施の形態と同様の作用効果を奏し得る。
【０１１６】
以上の構成によれば、第２の実施の形態によるプリンタ２０１では、ファームウェアを更新する際に、予め外部メモリ２１２におけるその他のプログラムエリアＡＲ３内の全領域に未定義コードを書き込んでから、新たなファームウェアを書き込む処理を行うようにした。プリンタ２０１は、ファームウェアの書き込みを正常に完了できなかった場合、その他のプログラムエリアＡＲ３に未定義コードが書き込まれた状態のままファームウェア実行処理を行うため、該未定義コードのフェッチ及びデコードを検知した場合に、例外処理を実行して操作パネル２０３にエラー表示画面を表示してユーザに通知する。これによりユーザは、未定義コードの検知を直ちに認識でき、さらにファームウェアの書き込みに失敗した可能性が高いことに容易に想到でき、適切な対処を迅速に行うことができる。
【０１１７】
［３．第３の実施の形態］
［３−１．画像形成装置の構成］
図１４と対応する図２１に模式的なブロック図を示すように、第３の実施の形態によるプリンタ３０１は、第２の実施の形態によるプリンタ２０１と比較して、制御基板２０２に代わる制御基板３０２を有する点、及びブザー３０８を有する点において相違するものの、他の点については同様に構成されている。ブザー３０８は、制御基板３０２と接続されており、該制御基板３０２の制御に基づいて音を発生させ、また停止させる。
【０１１８】
制御基板３０２は、第２の実施の形態における制御基板２０２（図１４）と比較して、ＡＳＩＣ２１１に代わるＡＳＩＣ３１１を有する点において相違するものの、他の点については同様に構成されている。ＡＳＩＣ３１１は、第２の実施の形態におけるＡＳＩＣ２１１と比較して、ＣＰＵ２２１に代わるＣＰＵ３２１を有する点、並びにエラー通報回路３２６を有する点において相違するものの、他の点については同様に構成されている。
【０１１９】
ただしプリンタ３０１では、第２の実施の形態によるプリンタ２０１と異なり、外部メモリ２１２に格納されているファームウェアを内部ＲＡＭ２２４に転送（すなわちコピー）した後、ＣＰＵ３２１が当該内部ＲＡＭ２２４からファームウェアの命令コードを順次読み出して実行するようになっている。
【０１２０】
内部ＲＡＭ２２４は、図１５（Ａ）と対応する図２２（Ａ）に模式的なメモリマップを示すように、第２の実施の形態における外部メモリ２１２と同様に、アドレスの先頭側からベクタアドレス格納エリアＡＲ１、例外処理プログラムエリアＡＲ２、及びその他のプログラムエリアＡＲ３が設けられている。
【０１２１】
ただしプリンタ３０１では、外部メモリ２１２から内部ＲＡＭ２２４へファームウェアを転送する際に、第２の実施の形態においてファームウェアを更新する場合とは異なり、ベクタアドレス格納エリアＡＲ１、例外処理プログラムエリアＡＲ２、及びその他のプログラムエリアＡＲ３の全ての領域を書き換えるようになっている。
【０１２２】
エラー通報回路３２６（図２１）は、その内部に図示しないＣＰＵ、ＲＯＭ及びＲＡＭ等を有しており、当該ＲＯＭに所定のエラー通報プログラムが予め格納されている。またエラー通報回路３２６は、ＣＰＵ３２１及び内部バス２２８と接続されている。ＣＰＵ３２１は、命令コードをフェッチする際に、フェッチ信号を生成してエラー通報回路３２６に通知するようになっている。これによりエラー通報回路３２６は、ＣＰＵ３２１における命令コードのフェッチサイクルを知得することができる。
【０１２３】
またエラー通報回路３２６は、内部バス２２８を監視することにより、該内部バス２２８上を流れているデータを取得する。内部バス２２８では、様々なデータが流れるものの、タイミングによっては、ＣＰＵ３２１が内部ＲＡＭ２２４から読み出したデータ（すなわち命令コード）が流れている。
【０１２４】
さらにエラー通報回路３２６は、内部バス２２８から取得したデータ（すなわち命令コード）が未定義コードであるか否かを判定した上で、未定義コードであった場合に、ブザー３０８を制御して鳴動させること、例えば所定の通知音を発生させることができる。
【０１２５】
［３−２．ファームウェア転送処理］
次に、プリンタ３０１においてファームウェア（制御プログラム）を転送する処理について説明する。プリンタ３０１のＣＰＵ３２１（図２１）は、外部メモリコントローラ２２２を介して外部メモリ２１２から所定の転送プログラムを読み出して実行することにより、図２３に示すファームウェア転送処理手順ＲＴ３１を開始して最初のステップＳＰ３１１に移る。
【０１２６】
ステップＳＰ３１１においてＣＰＵ３２１は、初期化処理を行い、次のステップＳＰ３１２に移る。このときＣＰＵ３２１は、初期化処理として、例えば内部ＲＡＭ２２４にファームウェアを書き込む際の先頭アドレスを、ベクタアドレス格納エリアＡＲ１の先頭アドレスに設定する等の処理を行う。
【０１２７】
ステップＳＰ３１２においてＣＰＵ３２１は、内部ＲＡＭ２２４における全ての領域に対し、例えば「Ａ５Ｈ」のような未定義コードを書き込み、次のステップＳＰ３１３に移る。これにより内部ＲＡＭ２２４は、例えば図２２（Ｂ）及び（Ｃ）にダンプデータを示すように、全領域に未定義コード「Ａ５Ｈ」が書き込まれた状態となる。
【０１２８】
ステップＳＰ３１３においてＣＰＵ３２１は、外部メモリ２１２から外部メモリコントローラ２２２を介して内部ＲＡＭ２２４へ各データや各プログラム、すなわちベクタアドレスや例外処理プログラム、及びファームウェア等を順次転送し、次のステップＳＰ３１４に移る。このときＣＰＵ３２１は、ステップＳＰ３１２において各アドレスに書き込まれた未定義コード「Ａ５Ｈ」にそれぞれ上書きするようにして、各データや各プログラムの各命令コードを順次書き込んでいく。
【０１２９】
このためプリンタ３０１は、仮に各データや各プログラムを外部メモリ２１２から内部ＲＡＭ２２４へ転送する途中でエラーが発生するなどして中断した場合等に、該内部ＲＡＭ２２４内に、未定義コード「Ａ５Ｈ」が残ったままの状態となる。
【０１３０】
ステップＳＰ３１４においてＣＰＵ３２１は、第２の実施の形態と同様に、サブルーチンとしてリセット処理を実行し、その次のステップＳＰ３１５に移ってファームウェア転送処理手順ＲＴ３１を終了する。
【０１３１】
これによりＣＰＵ３２１は、第２の実施の形態と同様に、プログラムを開始するアドレスとして、リセットの割込処理における開始アドレスが格納されているアドレス「００００Ｈ」（図１６）から開始アドレスを読み出してプログラムカウンタに設定する。その後、ＣＰＵ３２１は、内部ＲＡＭ２２４における開始アドレスから命令コードを順次読み出すことにより、ファームウェアの実行を開始する。このときＣＰＵ３２１は、内部ＲＡＭ２２４から命令コードをフェッチする度に、エラー通報回路３２６に対してフェッチ信号を送信する。
【０１３２】
一方、エラー通報回路３２６は、電源が投入されると、図２４に示すエラー通報処理手順ＲＴ３２を開始して最初のステップＳＰ３２１に移る。ステップＳＰ３２１においてエラー通報回路３２６は、ＣＰＵ３２１からフェッチ信号を受信したか否かを判定する。ここで否定結果が得られると、エラー通報回路３２６はこのステップＳＰ３２１を繰り返すことにより、ＣＰＵ３２１からのフェッチ信号の受信を待ち受ける。
【０１３３】
一方、ステップＳＰ３２１において肯定結果が得られると、このことはＣＰＵ３２１からフェッチ信号を受信したため、該ＣＰＵ３２１がフェッチした命令コードと同一の命令コードを当該エラー通報回路３２６としても取得する必要があることを表している。このときエラー通報回路３２６は、次のステップＳＰ３２２に移る。
【０１３４】
ステップＳＰ３２２においてエラー通報回路３２６は、内部バス２２８からデータ（すなわち命令コード）をラッチし（すなわち取得し）、次のステップＳＰ３２３に移る。
ステップＳＰ３２３においてエラー通報回路３２６は、内部バス２２８からラッチしたデータが未定義コードであるか否かを判定する。
【０１３５】
ここで否定結果が得られると、このことはＣＰＵ３２１がフェッチした命令コードが未定義コードではないため、少なくともこの命令コードに関して、ステップＳＰ３１３（図２３）において外部メモリ２１２から内部ＲＡＭ２２４へ各データ又は各プログラムを正常に転送できたことを表している。このときエラー通報回路３２６は、再度ステップＳＰ３２１に戻り、ＣＰＵ３２１により次の命令コードがフェッチされるのを待ち受ける。
【０１３６】
一方、ステップＳＰ３２１において肯定結果が得られると、このことは少なくともこの命令コードをフェッチしたアドレスに関して、ステップＳＰ３１２（図２３）において書き込まれた未定義コードが残っていることを表している。すなわちこれは、当該アドレスに関して、ステップＳＰ３１３（図２３）において外部メモリ２１２から内部ＲＡＭ２２４へ各データ又は各プログラムを正常に転送できていないことを表している。このときエラー通報回路３２６は、次のステップＳＰ３２４に移る。
【０１３７】
ステップＳＰ３２４においてエラー通報回路３２６は、エラー発生信号を生成してＣＰＵ３２１へ送信し、次のステップＳＰ３２５に移る。これに応じてＣＰＵ３２１は、所定の例外処理を実行する。ステップＳＰ３２５においてエラー通報回路３２６は、ブザー３０８を鳴動させることにより、未定義コードがフェッチ及びデコードされたことをユーザに通知する。その後、エラー通報回路３２６は、つぎのステップＳＰ３２６に移ってエラー通報処理手順ＲＴ３２を終了する。
【０１３８】
ここで、プリンタ３０１でのエラー通報処理における各種データや信号のタイミングに関して、図２５のタイミングチャートを参照しながら説明する。図２５（Ａ）〜（Ｄ）は、内部バス２２８のクロック、アドレス、リード信号、及びデータバスをそれぞれ表している。また図２５（Ｅ）はＣＰＵ３２１のフェッチ信号を表しており、図２５（Ｆ）〜（Ｇ）はエラー通報回路３２６のラッチデータ及びエラー信号をそれぞれ表している。
【０１３９】
内部バス２２８のクロック（Ａ）は、ＡＳＩＣ３１１内に設けられたクロック回路（図示せず）において生成されるクロック信号であり、該ＡＳＩＣ３１１内の各回路や内部バス２２８がこのクロック信号に同期して動作するようになっている。説明の都合上、以下では、図２５における前半の２クロック分をリードサイクルＲＣ１とし、後半の２クロック分をリードサイクルＲＣ２とする。
【０１４０】
内部バス２２８のアドレス（Ｂ）は、該内部バス２２８のうちアドレスを表すためのアドレスバス上を流れるデータを表す。リード信号（Ｃ）は、内部バス２２８からデータを読み出すタイミングを表す信号であり、負論理となっている。データバス（Ｄ）は、内部バス２２８のうちデータそのものを表すデータバス上を流れるデータを表す。
【０１４１】
ＣＰＵ３２１のフェッチ信号（Ｅ）は、ＣＰＵ３２１においてフェッチ処理が行われるタイミングを表す信号であり、負論理となっている。エラー通報回路３２６のラッチデータ（Ｆ）は、エラー通報回路３２６により内部バス２２８からラッチされたデータを表す。エラー信号（Ｇ）は、エラー通報回路３２６においてラッチしたデータが未定義コードであると判定した場合に、当該エラー通報回路３２６が生成するエラー信号であり、正論理となっている。
【０１４２】
図２５において、前半のリードサイクルＲＣ１では、ＣＰＵ３２１が内部ＲＡＭ２２４からデータアドレスを読み出している。すなわちこの場合、ＣＰＵ３２１は命令コードを読み出していないため、フェッチ処理を行っていない。この場合、フェッチ信号（Ｅ）は、非アクティブであることを表すハイレベルのままである。このときエラー通報回路３２６は、内部バス２２８からデータをラッチせず、未定義コードか否かの判定処理も行わない。
【０１４３】
一方、図２５における後半のリードサイクルＲＣ２では、ＣＰＵ３２１が内部ＲＡＭ２２４から命令フェッチアドレスを読み出している。すなわちこの場合、ＣＰＵ３２１は命令コードを読み出してフェッチ処理を行っており、これに伴ってフェッチ信号（Ｅ）をローレベルに立ち下げる。このときエラー通報回路３２６は、内部バス２２８からデータ（すなわち命令コード）をラッチし（Ｆ）、その内部で未定義コードか否かの判定処理を行う。ここでエラー通報回路３２６は、ラッチした命令コードが未定義コード「Ａ５Ｈ」であるため、エラー信号（Ｇ）をハイレベルに立ち上げてアクティブ状態とし、ＣＰＵ３２１にエラーが発生したことを通知する。
【０１４４】
［３−３．効果等］
以上の構成において、第３の実施の形態によるプリンタ３０１は、起動後に内部ＲＡＭ２２４の全領域に未定義コードを書き込んだ後、外部メモリ２１２から各データや各プログラムを内部ＲＡＭ２２４に転送して書き込む。その後、プリンタ３０１は、リセット処理を行い、ＣＰＵ３２１が内部ＲＡＭ２２４にアクセスして命令コードを読み出して実行する。
【０１４５】
またプリンタ３０１は、ＡＳＩＣ３１１に設けたエラー通報回路３２６により、ＣＰＵ３２１から得られるフェッチ信号を基に内部バス２２８から命令コードをラッチし、これが未定義コードであるか否かを判定するようにした。
【０１４６】
プリンタ３０１は、仮に外部メモリ２１２から内部ＲＡＭ２２４への各データや各プログラムの転送に失敗した場合、該内部ＲＡＭ２２４における少なくとも一部のアドレスに、未定義コードが残っている状態となる。このような場合、プリンタ３０１は、ＣＰＵ３２１がこの未定義コードをフェッチした段階で、エラー通報回路３２６が内部バス２２８からラッチした命令コードを当該未定義コードと判定し、該ＣＰＵ３２１にエラー発生信号を送信すると共に、ブザー３０８を鳴動させる。
【０１４７】
これによりプリンタ３０１は、内部ＲＡＭ２２４に各データや各プログラムが正常に書き込まれておらず、ＣＰＵ３２１により正常なエラー処理を行い得ない場合であったとしても、エラー通報回路３２６によってブザー３０８を鳴動させ、ユーザに対して内部でエラーが発生していることを通知できる。
【０１４８】
換言すれば、第３の実施の形態によるプリンタ３０１では、第１の実施の形態によるシミュレーション装置１等と同様、ファームウェア等の書き込みを行う前に、予め未定義コードを書き込んでおくことにより、当該未定義コードをフェッチしたか否かを基に、当該ファームウェアの書込に失敗したか否かを容易に判別することができる。
【０１４９】
またプリンタ３０１では、第２の実施の形態によるプリンタ２０１とは異なり、ＣＰＵ３２１がフェッチした命令コードが未定義コードであるか否かを、該ＣＰＵ３２１とは別に設けたエラー通報回路３２６により判定する。このためプリンタ３０１では、ＣＰＵ３２１において判定する場合と比較して、処理負荷を軽減することができる。またプリンタ３０１では、例えば外部メモリ２１２に格納しているベクタアドレス格納エリアＡＲ１及び例外処理プログラムエリアＡＲ２内の各データを予め差し替えておくことにより、内部ＲＡＭ２２４におけるベクタアドレスや例外処理プログラムを更新することもできる。
【０１５０】
その他の点においても、第３の実施の形態では、第１及び第２の実施の形態と同様の作用効果を奏し得る。
【０１５１】
以上の構成によれば、第３の実施の形態によるプリンタ２０１では、起動後に内部ＲＡＭ２２４の全領域に未定義コードを書き込んだ後、外部メモリ２１２から各データや各プログラムを内部ＲＡＭ２２４に転送して書き込む。プリンタ３０１は、各データや各プログラムを正常に転送できなかった場合、未定義コードが書き込まれた状態のままファームウェアを実行するため、該未定義コードをフェッチした場合、エラー通報回路３２６によりこれを検知してブザー３０８を鳴動させ、ユーザに通知する。これによりユーザは、プリンタ３０１の内部において異常が発生したことを直ちに認識でき、適切な対処を行うことができる。
【０１５２】
［４．他の実施の形態］
なお上述した第１の実施の形態においては、シミュレーション処理手順ＲＴ１（図４）のステップＳＰ２において、ＲＯＭモデル３２に対し、未定義コードとして「Ａ５Ｈ」を書き込む場合について述べた。しかしながら本発明はこれに限らず、他の種々の未定義コードを書き込んでも良い。要は、ＣＰＵモデル３１において命令が割り当てられていないコードであれば良い。第２及び第３の実施の形態についても同様である。
【０１５３】
さらに上述した第１の実施の形態においては、ＲＯＭモデル３２の全領域に未定義コード「Ａ５Ｈ」を書き込む場合について述べた。しかしながら本発明はこれに限らず、例えばＲＯＭモデル３２のうち開始アドレスの近傍や、未定義コードをベクタアドレスとした場合に示すアドレスの近傍等、一部の領域にのみ未定義コードを書き込んでも良い。これにより、未定義コードの書き込みに要する時間を短縮できる。第２及び第３の実施の形態についても同様である。
【０１５４】
さらに上述した第１の実施の形態においては、異常通知ウィンドウ８０（図１０）に未定義コードをデコードした旨及びシミュレーション処理を停止した旨を表示する場合について述べた。しかしながら本発明はこれに限らず、例えばファームウェアのローディングに失敗した可能性がある旨を表示する等、他の情報を通知しても良い。第２の実施の形態についても同様である。
【０１５５】
さらに上述した第３の実施の形態においては、プリンタ３０１にブザー３０８を設け、エラー通報回路３２６により、ＣＰＵ３２１においてフェッチしたデータが未定義コードであると判定した場合、当該ブザー３０８を鳴動させる場合について述べた。しかしながら本発明はこれに限らず、例えばプリンタ３０１にＬＥＤ等による通知ランプを設けておき、この通知ランプを点灯或いは点滅させても良い。また、第２の実施の形態と同様に、操作パネル２０３に所定のエラー表示画面を表示させても良い。さらには、これらを適宜組み合わせても良い。
【０１５６】
さらに上述した第３の実施の形態においては、エラー通報回路３２６をＡＳＩＣ３１１内に設ける場合について述べた（図２１）。しかしながら本発明はこれに限らず、例えばエラー通報回路３２６を制御基板３０２上におけるＡＳＩＣ３１１から独立した半導体チップとして構成しても良い。この場合、ＡＳＩＣ３１１からエラー通報回路３２６に対し、ＣＰＵ３２１のフェッチ信号や内部バス２２８に流れるデータを供給できれば良い。
【０１５７】
また上述した第１の実施の形態においては、シミュレーション装置１がプリンタのシミュレーション処理を行う場合について述べた。しかしながら本発明はこれに限らず、シミュレーション装置１が他の種々の情報機器のシミュレーション処理を行うようにしても良い。
【０１５８】
さらに上述した第２の実施の形態においては、プリンタ２０１のファームウェアを更新する場合について述べた。しかしながら本発明はこれに限らず、他の種々の情報機器におけるファームウェアを更新する場合に適用しても良い。第３の実施の形態についても同様である。
【０１５９】
さらに上述した第１の実施の形態においては、シミュレーション装置１がファームウェアを記憶部３から読み出す場合について述べた。しかしながら本発明はこれに限らず、例えば通信部４及び所定のネットワークを介してシミュレーション装置１と接続されたサーバ装置（図示せず）等の情報処理装置からファームウェアを取得（受信）しても良い。
【０１６０】
さらに上述した第１の実施の形態においては、シミュレーション装置１が実行するシミュレーションプログラムを記憶部３に記憶させておく場合について述べた。しかしながら本発明はこれに限らず、例えば通信部４及び所定のネットワークを介してシミュレーション装置１と接続されたサーバ装置（図示せず）等の情報処理装置からシミュレーションプログラムを取得して実行しても良い。
【０１６１】
さらに本発明は、上述した各実施の形態及び他の実施の形態に限定されるものではない。すなわち本発明は、上述した各実施の形態と上述した他の実施の形態の一部又は全部を任意に組み合わせた実施の形態や、一部を抽出した実施の形態にもその適用範囲が及ぶものである。
【０１６２】
さらに上述した実施の形態においては、モデル形成部としてのモデル形成部１１と、未定義コード書込部としての未定義コード書込部１３と、制御プログラム書込部としての制御プログラム書込部１４と、命令コード実行部としての命令コード実行部１５とによってシミュレーション装置としてのシミュレーション装置１を構成する場合について述べた。しかしながら本発明はこれに限らず、その他種々の構成でなるモデル形成部と、未定義コード書込部と、制御プログラム書込部と、命令コード実行部とによってシミュレーション装置を構成しても良い。
【産業上の利用可能性】
【０１６３】
本発明は、例えばプリンタのような情報処理装置のシミュレーション処理を行うシミュレーション装置で利用できる。
【符号の説明】
【０１６４】
１……シミュレーション装置、２……制御部、３……記憶部、４……通信部、５……表示部、６……操作部、８……バス、１１……モデル形成部、１２……モデル画像表示処理部、１３……未定義コード書込部、１４……制御プログラム書込部、１５……命令コード実行部、１６……異常処理部、２０……プリンタモデル、６０……モデル表示ウィンドウ、８０……異常通知ウィンドウ、２０１、３０１……プリンタ、２０２、３０２……制御基板、２０２Ｃ……コネクタ、２０３……操作パネル、２１１、３１１……ＡＳＩＣ、２１２……外部メモリ、２２１、３２１……ＣＰＵ、２２２……外部メモリコントローラ、２２４……内部ＲＡＭ、２２５……操作パネルコントローラ、２２８……内部バス、３０８……ブザー、３２６……エラー通報回路、ＡＲ１……ベクタアドレス格納エリア、ＡＲ２……例外処理プログラムエリア、ＡＲ３……その他のプログラムエリア。
【図１】
2020173616.tif 000003
【図２】
2020173616.tif 000004
【図３】
2020173616.tif 000005
【図４】
2020173616.tif 000006
【図５】
2020173616.tif 000007
【図６】
2020173616.tif 000008
【図７】
2020173616.tif 000009
【図８】
2020173616.tif 000010
【図９】
2020173616.tif 000011
【図１０】
2020173616.tif 000012
【図１１】
2020173616.tif 000013
【図１２】
2020173616.tif 000014
【図１３】
2020173616.tif 000015
【図１４】
2020173616.tif 000016
【図１５】
2020173616.tif 000017
【図１６】
2020173616.tif 000018
【図１７】
2020173616.tif 000019
【図１８】
2020173616.tif 000020
【図１９】
2020173616.tif 000021
【図２０】
2020173616.tif 000022
【図２１】
2020173616.tif 000023
【図２２】
2020173616.tif 000024
【図２３】
2020173616.tif 000025
【図２４】
2020173616.tif 000026
【図２５】
2020173616.tif 000027