(57)【特許請求の範囲】
【請求項１】
エミュレート対象となる装置（以下、「対象装置」）用のアプリケーション（以下、「対象ＡＰ」）に含まれる複数の命令で構成される命令列を実行して前記対象ＡＰを動作させるエミュレート装置であって、前記対象装置は、前記命令列に含まれる命令を所定の周期で順次実行するものであり、
前記対象装置による前記命令列の実行をエミュレートし、前記命令列に間欠的にウェイトを挿入して前記命令列の実行のエミュレートを行うことでエミュレーション速度の調整を行う速度管理部を有し、
前記エミュレート装置は、前記対象ＡＰの命令列の実行中にコールバックを行って前記対象ＡＰの命令列の実行を停止してエミュレート装置本体の処理を行うスケジューラ機能実行部を有し、
前記速度管理部によるウェイトの挿入がなされると、このスケジューラ機能実行部が前記コールバックを行って前記対象ＡＰの命令列の実行を停止させ、
前記コールバックによるウェイトの挿入時には、前記命令列の実行において次回にウェイトを挿入するまでに実行する命令数が決定される、エミュレート装置。
【請求項２】
前記エミュレート装置は、前記対象装置に含まれる複数のデバイスのエミュレートするものであり、
前記エミュレートされるデバイスには、所定の動作クロック系で動作する第１のエミュレートされるデバイスと、前記所定のクロック系とは異なるクロック系で動作する第２のエミュレートされるデバイスと、が含まれ、
前記速度管理部は、前記第１のエミュレートされるデバイスと、前記第２のエミュレートされるデバイスと、のエミュレーション速度の調整を行うものである、請求項１記載のエミュレート装置。
【請求項３】
メモリを含み、前記第１のエミュレートされるデバイスは、前記メモリ内でソフトウェア的にエミュレートされるものであり、
前記第２のエミュレートされるデバイスをハードウェアでエミュレートするハードウェアエミュレート装置を有する、請求項２記載のエミュレート装置。
【請求項４】
前記速度管理部は、前記ウェイトがかけられている間に、自装置でのエミュレーションにおける対象ＡＰの実行速度と本来の実行速度とを比較し、その比較結果に基づいてウェイトの挿入頻度を決定することで、前記エミュレーション速度の調整を行う、請求項１記載のエミュレート装置。
【請求項５】
前記エミュレート装置は、クロック発生部を有し、前記速度管理部は、このクロック発生部から入力されるクロックをカウント可能なものであり、
前記速度管理部は、前回のウェイト挿入時から今回のウェイト挿入時までに実行された命令を対象装置で実行する場合に必要となる時間を求め、求められた時間と、前記クロック発生部から入力されたクロックのカウント数から求められる当該命令のエミュレートに要した時間とに基づいて前記エミュレーション速度の調整を行う、請求項４記載のエミュレート装置。
【請求項６】
速度管理部を備えたエミュレート装置が実行する方法であって、エミュレート対象となる装置（以下、「対象装置」）用のアプリケーション（以下、「対象ＡＰ」）に含まれる複数の命令で構成される命令列を実行して前記対象ＡＰを動作させるとともに、前記対象装置は、前記命令列に含まれる命令を所定の周期で順次実行するものであり、
前記エミュレート装置が、
前記対象装置による前記命令列の実行をエミュレートし、前記命令列に間欠的にウェイトを挿入して前記命令列の実行のエミュレートを行うことで、エミュレーション速度の調整を行い、
前記対象ＡＰの命令列の実行中にコールバックを行って前記対象ＡＰの命令列の実行を停止してエミュレート装置本体の処理を行い、
前記ウェイトの挿入がなされると、前記コールバックを行って前記対象ＡＰの命令列の実行を停止させ、
前記コールバックによるウェイトの挿入時には、前記命令列の実行において次回にウェイトを挿入するまでに実行する命令数が決定される、エミュレート方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばエンタテインメント装置のような情報処理装置において使用されるエミュレーション技術に係り、より詳しくは、ある情報処理装置用に開発されたアプリケーションソフトウエアを、他の情報処理装置で適切に実行できるようにするための改良された手法に関する。
【背景技術】
【０００２】
従来、情報処理装置では、当該情報処理装置のアーキテクチャに対応したアプリケーションを実行することは勿論可能であるが、他のアーキテクチャに対応した情報処理装置用のアプリケーションを実行することは困難である。
しかしながら、近年では、情報処理の進化が激しく、高速処理が可能なアーキテクチャが実用化されて多くのユーザにそのアーキテクチャが受け入れられても、比較的短期間の内に、更に高速処理が可能な他のアーキテクチャが出現することも多い。
この場合、既存のアーキテクチャと新たなアーキテクチャとの間で互換性がない場合には、既存のアーキテクチャに対応したアプリケーションを新たなアーキテクチャを採用した情報処理装置上で実行することはできなくなる。このようなソフトウェア資産の陳腐化を防ぎ、また、新たなアーキテクチャの受け入れの円滑化を図るために、新たなアーキテクチャに対応した情報処理装置においても、既存のアーキテクチャとの互換性を維持することが求められることも多い。
【０００３】
この場合、あるアーキテクチャを採用した情報処理装置を、異なるアーキテクチャの情報処理装置（以下、「対象装置」）のエミュレーションを行なうエミュレーション装置として動作させ、この対象装置用のアプリケーションソフトウエア（以下、「対象ＡＰ」）を実行することで、互換性を維持することも行われている。
【０００４】
上位互換が行われている例としては、プレイステーション（登録商標）や、その後継機であるプレイステーション２（登録商標）が良く知られている。プレイステーション２は、プレイステーションとは異なるアーキテクチャを採用しているものの、プレイステーション２上でプレイステーションのアーキテクチャをエミュレートすることで、上位互換性を維持している。
【０００５】
このようなエミュレーションでは、通常、情報処理装置をエミュレート装置として動作させ、対象ＡＰの実行が本来的に予定された対象装置の実行環境を、ソフトウェア、ハードウェア、あるいはこれらの組合せによって実現している。
より具体的には、対象装置がＣＰＵ、サウンドプロセッサ、グラフィックプロセッサ等のデバイスを有するものである場合、これらのデバイスをエミュレート装置ですべてソフトウェアで形成することで、エミュレーションを行うことができる。一方、エミュレート装置で、対象処理装置のデバイスのうち、例えばＣＰＵ、グラフィックプロセッサに関してはソフトウェアでエミュレーションを行ない、サウンドプロセッサに関してはエミュレート装置のサウンドプロセッサを用いてハードウェアでエミュレーションを行うこともできる。このようにして、ソフトウェアとハードウェアの組み合わせによりエミュレーションを行うことも可能である。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
エミュレーションを行う場合、対象ＡＰに含まれる命令の組合せによっては、エミュレート装置でその命令を実行するときの実行タイミングが、本来的に予定された実行タイミングと合致しないことにより不具合が生じる場合がある。従って、対象ＡＰに含まれる命令の実行タイミングを調整することが必要とされる。
【０００７】
エミュレート装置でのエミュレーションをすべてソフトウェアで行う場合、エミュレート装置では、ソフトウェアでエミュレートされる対象装置のすべてのデバイスを一つのソフトウェアクロックから生成されたタイミングで動作させる。従って、エミュレートされる各デバイスは、同一のクロックを参照して動作するので、対象ＡＰに含まれる命令の実行タイミングが本来の実行タイミングからずれるおそれは小さい。
【０００８】
一方、エミュレーションの一部をハードウェアで行う場合は、ハードウェアが参照するクロックは、ソフトウェアでのエミュレーションで参照されるソフトウェアクロックとは異なる系統のものとなる。従って、エミュレートされるデバイスのそれぞれのクロックが異なることにより、ある命令を実行する場合に、エミュレートされるデバイスによって、その命令を実行可能な状態に達しているデバイスと、まだ実行可能な状態になっていないデバイスと、が混在する場合がある。命令を実行すべきデバイスが、その命令を実行可能な状態に達していない場合、正常なエミュレーションを行うことができなくなってしまう。
【０００９】
例えば、エミュレートされる対象装置のデバイスのうち、サウンドプロセッサをエミュレート装置のハードウェアで、ＣＰＵをソフトウェアでエミュレートする場合、ソフトウェアでエミュレートされるＣＰＵは、ソフトウェアクロックでタイミングをとることになる。一方、サウンドプロセッサは、エミュレート装置に実装されたハードウェアクロック系のクロックを参照するので、エミュレートされるサウンドプロセッサのクロック系は、ソフトウェアでエミュレートされるＣＰＵにおけるソフトウェアクロックとは別個のものとなる。
【００１０】
また、ソフトウェアで複数のデバイスをエミュレートする場合、エミュレートされるデバイスは必ずしも同一のソフトウェアクロックで動作するわけではない。ソフトウェアでエミュレートされるデバイスのうち、あるデバイスは第１のソフトウェアクロック系で動作し、別のデバイスは、第２のソフトウェアクロックで動作することになる。
【００１１】
このように、エミュレート装置においては、対象ＡＰに含まれる命令を実行する場合には、エミュレートされるデバイスのうち当該命令を実行するデバイスがその命令を実行可能な状態になってからエミュレーションを行うことが求められる。
【００１２】
上記背景の下、本発明は、エミュレートされる対象ＡＰに含まれる命令の実行タイミングを調整することができるエミュレーション技術を提供することを主たる課題とする。
また、本発明は、エミュレートされる対象装置のデバイスのそれぞれが別クロックで動作する場合に、対象ＡＰに含まれる命令の実行タイミングを調整することができるエミュレーション技術を提供することをも課題とする。
また、本発明は、対象装置の複数のデバイスのソフトウェアエミュレーションを行う場合に、対象ＡＰに含まれる命令の実行タイミングを調整することができるエミュレーション技術を提供することをも課題とする。
また、本発明は、ソフトウェアエミュレーションとハードウェアエミュレーションとの組み合わせによるエミュレーションを行う場合に、対象ＡＰに含まれる命令の実行タイミングを調整することができるエミュレーション技術を提供することをも課題とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明によれば、エミュレート対象となる装置（以下、「対象装置」）用のアプリケーション（以下、「対象ＡＰ」）に含まれる複数の命令で構成される命令列を実行して前記対象ＡＰを動作させるエミュレート装置であって、前記対象装置は、前記命令列に含まれる命令を所定の周期で順次実行するものであり、前記対象装置による前記命令列の実行をエミュレートし、前記命令列に間欠的にウェイトを挿入して前記命令列の実行のエミュレートを行うことでエミュレーション速度の調整を行う速度管理部を有する、エミュレート装置が提供される。
このように間欠的にウェイトを挿入することで、対象装置による命令列のエミュレーション速度の調整をきめ細かに行うことができる。好ましくは、エミュレーション速度が対象装置における対象ＡＰの本来の実行速度に近づくようにウェイトの挿入頻度が決定される。
【００１４】
ウェイトの長さが短いほどエミュレーション速度調整の精度が高くなるのでウェイト時間は短いほうが良い。エミュレーション速度の調整を行うために必要となる時間を考慮しなければ、ウェイト時間は、エミュレート装置内のエミュレートを行うプロセッサにおける１クロック分が最短となる。エミュレーションを行うプロセッサでエミュレーション速度の調整をも行う場合、エミュレーション速度を調整するために必要となる時間が実装上の最短の時間になる。例えば、エミュレーション速度を対象装置における対象ＡＰの本来の実行速度に近づけるようウェイトの挿入頻度を調整するために必要となる時間が、この最短時間に相当する。
ウェイトの長さの上限に関しては、ウェイト自体の長さが長すぎると、デバイス間の動作タイミングの調整がとれなくなることから、好ましくは、エミュレーション速度の調整に支障を来さない長さを最長とする。
【００１５】
以上のことから、挿入されるウェイト時間は、好ましくは、エミュレートを行うプロセッサの１クロック〜デバイス間の動作タイミングの調整がとれる範囲内のクロック数となる。例えば、エミュレートを行うプロセッサの１クロック〜１０００クロック、１クロック〜４００クロック、あるいは１クロック〜２００クロック、あるいは１クロック〜１５０クロック、あるいは１クロック〜５０クロック程度である。後述する実施形態では、このウェイトの長さは１００クロックとなっている。
【００１６】
また、本発明では、フレーム単位（通常は１／６０秒）、あるいは画面の書き換え毎にウェイト調整を行う技術とは異なる。本発明におけるウェイトの時間長は、例えば後述する実施形態においては４４０ＭＨｚのクロック周波数において１００クロック、即ち０．２３μｓ程度と、１／６０秒よりもはるかに短い間隔でウェイトを挿入している。本発明におけるウェイトの時間長は、例えば０．００２３〜２．３μｓ、あるいは０．００２３〜０．９１μｓ、あるいは０．００２３〜０．４６μｓ、あるいは０．００２３〜０．３４μｓ、あるいは０．００２３〜０．１１μｓ程度である。従って、本発明は、フレーム単位でのウェイト調整とは全く異なる技術である。
【００１７】
好ましくは、前記エミュレート装置は、前記対象装置に含まれる複数のデバイスのエミュレートするものであり、前記エミュレートされるデバイスには、所定の動作クロック系で動作する第１のエミュレートされるデバイスと、前記所定のクロック系とは異なるクロック系で動作する第２のエミュレートされるデバイスと、が含まれ、前記速度管理部は、前記第１のエミュレートされるデバイスと、前記第２のエミュレートされるデバイスと、のエミュレーション速度の調整を行うものである。
【００１８】
また、メモリを含み、前記第１のエミュレートされるデバイスは、前記メモリ内でソフトウェア的にエミュレートされるものであり、前記第２のエミュレートされるデバイスをハードウェアでエミュレートするハードウェアエミュレート装置を有するエミュレート装置も提供される。
このように動作クロック系の異なるデバイスが混在する場合には、対象ＡＰにおける命令の実行タイミングがずれて正常なエミュレーションを行えなくなるおそれがある。しかし、命令列にウェイトを挿入してエミュレーション速度を細かく調整することで、正常なエミュレーションを行われる。
好ましくは、前記速度管理部は、前記ウェイトがかけられている間に、自装置でのエミュレーションにおける対象ＡＰの実行速度と本来の実行速度とを比較し、その比較結果に基づいてウェイトの挿入頻度を決定することで、前記エミュレーション速度の調整を行う。
【００１９】
また、エミュレート装置は、クロック発生部を有し、前記速度管理部は、このクロック発生部から入力されるクロックをカウント可能なものであり、前記速度管理部は、前回のウェイト挿入時から今回のウェイト挿入時までに実行された命令を対象装置で実行する場合に必要となる時間を求め、求められた時間と、前記クロック発生部から入力されたクロックのカウント数から求められる当該命令のエミュレートに要した時間とに基づいて前記エミュレーション速度の調整を行うものであることが好ましい。
【００２０】
エミュレート装置は、前記対象ＡＰの命令列の実行中にコールバックを行って前記対象ＡＰの命令列の実行を停止してエミュレート装置本体の処理を行うスケジューラ機能実行部を有し、前記速度管理部によるウェイトの挿入がなされると、このスケジューラ機能実行部が前記コールバックを行って前記対象ＡＰの命令列の実行を停止することが好ましい。
このようにスケジューラ機能を実装することで、命令列へのウェイトを挿入して対象ＡＰの命令列の実行停止を容易に行うことができる。
また、好ましくは、前記コールバックによるウェイトの挿入時には、前記命令列の実行において次回にウェイトを挿入するまでに実行する命令数が決定される。
【００２１】
更に、本発明によれば、速度管理部を備えたエミュレート装置が実行する方法であって、エミュレート対象となる装置（以下、「対象装置」）用のアプリケーション（以下、「対象ＡＰ」）に含まれる複数の命令で構成される命令列を実行して前記対象ＡＰを動作させるとともに、前記対象装置は、前記命令列に含まれる命令を所定の周期で順次実行するものであり、前記エミュレート装置が、前記対象装置による前記命令列の実行をエミュレートし、前記命令列に間欠的にウェイトを挿入して前記命令列の実行のエミュレートを行うことで、エミュレーション速度の調整を行う、エミュレート方法も提供される。
【発明の効果】
【００２２】
以上の説明から明らかなように、本発明によれば、情報処理装置の処理能力を対象ＡＰ用に正しく適合させることができるようになるという、優れた効果が得られる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して、エミュレート装置として動作される情報処理装置としてエンタテインメント装置を用いた例によって、本発明に係るエミュレート装置の実施の形態を説明する。また、この実施形態では、このエンタテインメント装置を上位機、エミュレートの対象装置を下位機として説明を行う。
【００２４】
＜上位機＞
図１は、本発明のエミュレート装置として動作可能なエンタテインメント装置の要部構成図である。このエンタテインメント装置は、ＭＰＵ（micro processor unit）１００とＧＰ（graphical processor）１１０とが専用バス１０１で接続され、ＭＰＵ１００とエミュレートプロセッサＥＰ（emulate processor）１２０とがバス（ＳＢＵＳ）１０２で接続され、さらに、メディアからソフトウエア等を読みとるメディアデコーダ１３０、音処理手段であるＳＰＵ（sound processor unit）１４０及びＲＯＭ（read only memory）１５０が、バス（ＳＳＢＵＳ）１０３を通じてＥＰ１２０に接続されている。また、ＥＰ１２０には、エンタテインメント装置の動作クロックを発生するためのクロック発生部１４５が接続されている。ＭＰＵ１００はメインメモリ１６０を備え、ＥＰ１２０はＥＰメモリ１７０を備えている。ＥＰ１２０には、さらに、コントローラ１８０とメモリカード１９０とが接続されている。この実施形態では、クロック発生部１４５からのクロックは４４０ＭＨｚであり、エミュレートプロセッサＥＰ１２０の動作クロックも４４０ＭＨｚとなっている。
【００２５】
ＭＰＵ１００の基本的な機能は、ＲＯＭ１５０に格納された各種プログラムや、ＣＤやＤＶＤ等のメディア２００からメインメモリ１６０にロードされた対象ＡＰを実行することによって、所定の処理を行うことである。ＧＰ１１０は、このエンタテインメント装置の描画処理機能を受け持つグラフィックスプロセッサである。具体的には、ＭＰＵ１００からの指示に従って対象ＡＰについての描画処理を行う。
【００２６】
ＥＰ１２０は、ＭＰＵ１００と周辺装置（メディアデコーダ１３０やＳＰＵ１４０等）との間のデータのやり取りを制御する入出力用プロセッサであり、かつ、上位機をエミュレート装置として動作させる場合には、エミュレートされる下位機のＣＰＵ等のエミュレートを行う。メディアデコーダ１３０は、メディア２００からデータを読み出し、そのメインメモリ１６０への転送を行う。
ＳＰＵ１４０は、サウンド再生処理プロセッサであり、サウンドバッファ（不図示）に格納された圧縮波形データを、ＭＰＵ１００等からの発音命令に基づき所定のサンプリング周波数で再生する。なお、ＳＰＵ１４０は、エミュレーションモードと通常モードとでその動作が切り替わるようにする。すなわち、エミュレーションモードでは、後述する下位機のＳＰＵ２４０と同じものとして動作する。一方、通常モードでは、ＳＰＵ２４０よりも高性能なサウンド処理を行う手段として動作する。従って、ＳＰＵ１４０は、ＳＰＵ２４０の上位互換機となっている。
【００２７】
ＲＯＭ１５０は、起動時等にＭＰＵ１００やＥＰ１２０が実行するプログラムが格納されている読み出し専用のメモリである。ＲＯＭ１５０には、ＭＰＵ１００とＥＰ１２０とが共用するプログラム並びに各プロセッサ専用のプログラムが分離して格納される。メインメモリ１６０、ＥＰメモリ１７０は、それぞれＭＰＵ１００、ＥＰ１２０の作業用メモリとして機能する。コントローラ１８０は、ゲーム等の実行中に、プレイヤーの意図をアプリケーション等に伝達するインタフェースである。
【００２８】
メモリカード１９０は、書換可能な可搬性の不揮発性二次記録媒体であり、ＭＰＵ１００で実行された処理の処理結果や設定情報などが格納される。
【００２９】
本実施形態では、メディア２００は、書換不能な可搬性記録媒体であることを想定している。このメディア２００には、プログラムやプログラムを実行する際に必要となるデータ類が格納される。これらのデータの中には、メディア２００に上位機用のデータが格納されているか下位機用のデータが格納されているかを判別するためのコードも含まれる。
【００３０】
＜下位機＞
図１のエンタテインメント装置に対して下位機となるエンタテインメント装置の概要を説明する。このエンタテインメント装置は、図２に示されるように、メインメモリ２７０を備えたＣＰＵ（central processor unit）２２０にＧＰＵ（graphic processor unit）２１０及びコントローラ２８０が接続され、さらに、バス２９０を介してＣＤデコーダ２３０、ＳＰＵ２４０、ＲＯＭ２５０がＣＰＵ２２０に接続されている。ＣＰＵ２２０の基本的な機能は、ＲＯＭ２５０に格納されたプログラムや、ＣＤ３００からメインメモリ２７０にロードされたプログラムを実行することによって、所定の処理を行うことである。ＣＰＵ２２０の動作周波数は、上位機のＥＰ１２０の動作周波数より低い周波数となっている。
【００３１】
従って、[ＥＰ１２０の動作周波数]／[ＣＰＵ２２０の動作周波数]の値をサイクル定数Ｃとすると、下位機のＣＰＵが１クロックの処理を行う間に、上位機のＭＰＵでは、１×Ｃクロックの処理が行われる。従って、上位機がエミュレータとして動作する場合、上位機のＣ回のクロックの処理で下位機の１回のクロックの処理を行うと、正常速度でエミュレーションを行うことができる。この実施形態では、サイクル定数の値は１２となっている。ＧＰＵ２１０は、ＣＰＵ２２０からの指示に従って描画処理を行うグラフィックスプロセッサである。ＧＰＵ２１０は、画像表示のためのＣＲＴＣ機能やフレームバッファ（不図示）に対するポリゴンの描画機能を備える。ＣＤデコーダ２３０は、ＣＤ３００からその記録情報を読み出し、そのメインメモリ２７０への転送を行う。ＲＯＭ２５０には、起動時等にＣＰＵ２２０によって実行されるプログラムが格納されている。また、ＥＰ１２０には、エンタテインメント装置の動作クロックを発生するためのクロック発生部２４５が接続されている。
【００３２】
上位機では、このような構成の下位機をエミュレートする。この実施形態では、下位機のＧＰＵ２１０、ＣＰＵ２２０、クロック発生部２４５を上位機でソフトウェアでエミュレートし、ＳＰＵ２４０を上位機のＳＰＵ１４０によってハードウェアでエミュレートした。なお、上位機では、ＥＰメモリ１７０の一部の領域を下位機のメインメモリに割り当てる。下位機のＲＯＭの内容は、上位機のＲＯＭに含めておく。下位機のコントローラ２８０は、上位機のコントローラ１８０で代用できる。このように上位機でエミュレーションを行うことにより、上位機では、下位機で動作する対象ＡＰを読み込んで、実行することができるようになる。
【００３３】
＜速度管理部＞
上位機では、本来的に下位機で動作するものである対象ＡＰを実行するために、図３に示されるように、ＥＰメモリ１７０内に仮想ＣＰＵ３２０、ソフトウェアクロック３４５、速度管理部３５０を形成する。このように形成された仮想ＣＰＵ３２０は、下位機のＣＰＵ２２０と同様の動作を行う。ソフトウェアクロック３４５は、上位機のクロック発生部１４５からのクロックを参照して生成される。また、本実施形態では、上位機のメインメモリ１６０には、速度管理部３５０が形成され、対象ＡＰに含まれる命令の実行タイミングを調整する。
更に、ＭＰＵ１００とＧＰ１１０とにより、メインメモリ１６０に仮想ＧＰＵ３１０を構築する。このように、本実施形態では、仮想ＣＰＵ３２０、仮想ＧＰＵ３１０という二つのデバイスを、ソフトウェアエミュレートしている。
【００３４】
以下、速度管理部３５０を説明する。図４に示されるように、速度管理部３５０は、エミュレート命令数検出部３５２、クロック換算部３５４、比較部３５６、ウェイトタイミング決定部３５８を有する。
命令数検出部３５２は、エミュレートされた下位機（以下、仮想下位機とする）において実行された命令数ｎを検出し、その結果を比較部３５６に送る。また、命令数検出部３５２は、上位機のクロック発生部１４５からのクロックを参照し、仮想下位機で命令を実行する間（具体的には、前回のウェイト挿入時から仮想下位機で上記の命令数ｎの実行を終えるまで）、におけるクロック発生部１４５でのクロック数を検出する。なお、この例の下位機は、一命令を一クロックで処理するものとした。従って、仮想下位機で処理した命令数＝仮想下位機でのクロック数となる。
【００３５】
理想的には、上述のように仮想下位機での１クロック分が上位機での１２クロックに対応するので、仮想下位機でｎ命令の処理にかかる時間＝下位機でのｎクロック＝上位機での１２ｎクロックとなる。しかし、仮想下位機で対象ＡＰに含まれる命令を実行する場合、命令によって、エミュレートするのに長時間を要するものと、短時間ですむものとがあり、必ずしも上記式が成立しない。これは、エミュレートが正確に行われないことを意味し、それによる不具合が生じるおそれがある。
【００３６】
速度管理部３５０は、このようなエミュレートにかかる時間を調整するものであり、そのために、命令数検出部３５２では、仮想下位機で実行した命令数ｎを比較部３５６に送り、また、前回のウェイト挿入時から仮想下位機で上記の命令数ｎの実行を終えるまでにおける上位機のクロック発生部１４５からのクロック数をクロック換算部３５４に送る。クロック換算部３５４では、そのクロック数をサイクル定数１２で除算し、その値を換算クロックＸとして比較部３５６に送る。
比較部３５６では、仮想下位機で実行した命令数と、換算クロックＸと、を比較し、比較結果をウェイトタイミング決定部３５８に送る。
【００３７】
ウェイトタイミング決定部３５８では、その比較結果によって、仮想下位機における命令にウェイト（wait）を入れる頻度を決定する。ウェイトを入れる頻度が高くなると仮想下位機におけるエミュレート速度が遅くなり、頻度が低くなるとエミュレート速度が速くなる。ウェイトを入れない場合は、最速でエミュレートがなされる。このように、エミュレート速度を、仮想下位機における命令に挿入するウェイトの頻度で調整することで、より正確なエミュレーションが可能となる。
なお、ウェイト自体の長さは、ウェイトの挿入頻度を決定するのに必要な時間より長ければよく、本実施形態では、上位機の動作クロック４４０ＭＨｚの約１００サイクル（０．２３μｓ）程度とした。このように、細かいタイミングで調整を行うことにより、本来の実行タイミングと、実際の命令の実行タイミングのずれを小さく抑えることができ、実行タイミングのずれによる不具合を抑えることができる。
ウェイトタイミング決定部３５８における動作の詳細は、以下の運用形態で説明する。
【００３８】
＜運用形態＞
以下、本実施例における上位機の動作を説明する。上位機のブート時には、上位機の電源投入等を契機に、メディアデコーダ１３０を通じてドライブ中のメディア２００が上位機用のものか、下位機用のものかを判別する。この判別は、エンタテインメント装置に最初に読み込まれるメディア２００の第１領域に上位機用か或いは下位機用かを示す種別コードを記録しておき、これを読み込むとともに、メディアデコーダ１３０内のメディア種別レジスタ（図示せず）を参照することにより可能となる。判別の結果、上位機用のメディア２００であった場合は、上位機を通常モードで立ち上げる。ドライブに何も入っていない場合も同様となる。一方、ドライブ中のメディア２００が下位機用のものであった場合は、エミュレーションモードで立ち上げる。
【００３９】
エミュレーションモードにおいては、ＲＯＭ１５０が読み込まれ、図３に示されるように、上位機のＥＰメモリ１７０に、下位機のＣＰＵ２２０に対応して形成される仮想ＣＰＵ３２０及びこの仮想ＣＰＵ３２０が参照するクロックを発生するためのソフトウェアクロック３４５が形成される。ソフトウェアクロックは、クロック発生部１４５から供給されるクロックを参照して仮想下位機におけるソフトウェアクロックを生成する。また、上位機のハードウェアであるＳＰＵ１４０は、下位機のＳＰＵ２４０と同じ動作を行う。
更に、速度管理部３５０がメインメモリ１６０に構築されてエミュレート速度の調整を行う。これにより、仮想下位機のエミュレーションが行われる。なお、図３には下位機のメインメモリ２７０やコントローラ２８０等が省略されているが、上述のように、これらは上位機のＥＰメモリ１７０の一部の領域やコントローラ１８０が用いられる。
【００４０】
仮想下位機でのエミュレーションでは、前回のウェイト（図中“ａ”で示される）時に決定された数の命令、この例では３０命令が実行された後に、再度ウェイトを入れ（図中“ｂ”で示される）、次回のウェイト挿入までに実行される命令数を決定する。この例では、ウェイト自体の長さは上位機の４４０ＭＨｚという動作クロックにおける１００サイクル分、つまり約０．２３μｓとする。速度管理部３５０は、この図５において“ｂ”で示されるウェイトの間に、次にウェイトを入れる迄に実行する命令数を決定することでウェイトの挿入頻度を調整し、命令実行タイミングの調整を行う。ウェイトを入れる迄に実行される命令数を減らすことで、ウェイトの挿入頻度が高くなり、従ってエミュレーションの速度が遅くなる。ウェイトを入れるまでに実行される命令数を増やすことで、ウェイトの挿入頻度が低くなり、エミュレーションがより高速に行われる。
【００４１】
なお、ウェイト自体の長さは、短ければ短いほど好ましいが、ウェイトの挿入頻度を決定するために必要となる時間の最大値よりは長くする必要があり、ウェイトの挿入頻度を決定するための最大演算時間をウェイト自体の長さとしてもよい。本実施形態では、仮想ＣＰＵ３２０をスケジューラ機能実行可能となるように構築しておき、スケジューラ機能の一つであるコールバックによるオーバーヘッド自体をウェイトとしている。この場合のウェイトの時間長は、上位機の動作クロック４４０ＭＨｚの約１００サイクル（０．２３μｓ）程度となった。
このように、ウェイト自体の時間を短くしてウェイトの挿入頻度を変えることで、エミュレーション速度を細かいタイミングで調整することができる。従って、本来の実行タイミングと、実際の命令の実行タイミングと、のずれを小さく抑え、実行タイミングのずれによる不具合を抑えることができる。
【００４２】
速度管理部３５０の図４に示される命令数検出部３５２は、前回のウェイト（図５において“ａ”で示されるウェイト）挿入時から仮想下位機での３０命令の実行を完了するまでの期間（図５における期間Ｐ）における上位機のクロック発生部１４５の実クロック数をカウントし、ウェイト（図５において“ｂ”で示されるウェイト）をかけている間に、仮想下位機で実行された命令数、この場合は３０、を比較部に送る。
また、命令数検出部３５２でカウントされた、期間Ｐにおける上位機のクロック発生部１４５での実クロック数は、クロック換算部３５４に送られる。
クロック換算部３５４は、この実クロック数の値を上述のサイクル定数１２で除算して、仮想下位機での命令数に対応する換算値Ｘを求め、求められた換算値Ｘの値を比較部３５６に送る。
【００４３】
比較部３５６では、速度管理部３５０から送信された仮想下位機での命令数と換算値Ｘとを図６に示されるフローチャートによって比較する。まず、比較部３５６は、仮想下位機で実行された命令数と換算値Ｘの値とを取得する（Ｓ１０１）。次に、仮想下位機で実行された命令数の値が換算値Ｘの値に等しいかを判断する（Ｓ１０２）。ここで、仮想下位機でのエミュレーション速度が実機の下位機の演算速度に一致する場合には、仮想下位機での命令数＝仮想下位機でのクロック数＝換算値Ｘとなる。
【００４４】
例えば命令数検出部３５２でカウントした期間Ｐにおける実クロック数が３６０である場合、換算値Ｘ＝３６０／１２＝３０となる。このように仮想下位機での命令実行数＝Ｘの場合（Ｓ１０２Ｙ）、仮想下位機に、再度３０命令後にウェイトをいれるよう指示する。本実施形態では、コールバック機能により、３０命令後にウェイトを入れるように指示する。
【００４５】
仮想下位機での命令数＝Ｘとはならない場合（Ｓ１０２Ｎ）、仮想下位機での命令数＞Ｘであるかを判断する（Ｓ１０４）。例えば命令数検出部３５２でカウントした期間Ｐにおける上位機のクロック発生部１４５の実クロック数が２８８の場合、換算値Ｘの値＝２８８／１２＝２４となる。従って、仮想下位機での命令数＞Ｘとなる。このように、仮想下位機での命令数＞Ｘである場合（Ｓ１０４Ｙ）、本来２４命令が行われる時間で３０命令が実行されている、つまり、エミュレーションが本来よりも高速でなされていることになる。従って、エミュレーション速度を落とすために、ウェイトを挿入する前に実行する命令数を減らすことで、ウェイトの挿入頻度を高くする。本実施形態では、ウェイト挿入迄に仮想下位機で実行される命令数をＫ倍（０＜Ｋ＜１）することで、元の値よりも小さい値にする。この例では、０．５倍にする。従って、この例では仮想下位機での命令数が３０から１５にされ、仮想下位機に、１５命令後にウェイトをいれるよう指示する。本実施形態では、コールバック機能により、１５命令後にウェイトを入れるように指示する。
【００４６】
仮想下位機での命令数＞Ｘではない場合（Ｓ１０４Ｎ）、Ｓ１０２で既に仮想下位機での命令数＝Ｘではないと判定されていることから、仮想下位機での命令数＜Ｘとなる。例えば命令数検出部３５２でカウントした期間Ｐにおける上位機のクロック発生部１４５の実クロック数が４２０の場合、換算値Ｘの値＝４２０／１２＝３５となる。この場合、本来３５命令が実行される時間で３０命令しか実行されていない、つまり、エミュレーションが本来よりも低速でなされていることになる。従って、エミュレーション速度を上げるために、ウェイトを挿入する前に実行する仮想下位機での命令数を増やして、ウェイトの挿入頻度を減らす。仮想下位機での命令数をＬ倍（１＜Ｌ）することで、仮想下位機での命令数を元の値よりも大きい値にすることもできるが、この例では、仮想下位機での命令数＜Ｘであるので、仮想下位機での命令数の値をＸの値で置き換えることとする。従って、この例では仮想下位機での命令数が３０から３５にされ、仮想下位機に、３５命令後にウェイトをいれるよう指示する。本実施形態では、コールバック機能により、３５命令後にウェイトを入れるように指示する。
【００４７】
以上の構成とすることで、エミュレーション速度が下位機での本来の実行速度よりも遅い場合には、ウェイトの挿入頻度を低くしてより高速にエミュレーションがなされる、また、本来の実行速度よりも速い場合には、ウェイトの挿入頻度を高くして、より低速にエミュレーションがなされる。
また、エミュレーション速度の調整は、非常に短い固定長のウェイトの挿入頻度の調整により行うことができ、この例では、上位機の動作クロックである４４０ＭＨｚの約１００クロック分の長さ（約０．２３μｓ）で行われる。例えば従来技術のように１フレーム（１／６０秒）単位でウェイトを入れる場合、ハードウェアの割り込み処理やレジスタへのアクセス処理等が大きく遅れてしまい、エミュレーションが正常に行われなくなるおそれがある。一方、本実施形態では、エミュレーション対象装置である下位機の１クロック単位で速度調整がなされる。このように非常に短時間のウェイトの挿入頻度を調整することにより、ハードウェアの割り込み処理やレジスタへのアクセス処理を実質的に妨げることなくエミュレーション速度の調整を行うことができる。
【００４８】
なお、ウェイトの挿入頻度の決定に長時間を要すると、そのこと自体によりエミュレーション速度が遅くなってしまう。従って、Ｓ１０３、Ｓ１０５、Ｓ１０６における、命令数を新たに決定する処理も、複雑な演算が不要なものであることが求められる。本実施形態では、Ｓ１０３では、命令数をそのまま維持しているので、決定に長時間を要することはない。また、Ｓ１０５では命令数を半分にするという、単純な処理（例えば２進数表現で１ビットシフトを行うことで、命令数を半分にすることができる）で命令数を決定しているので、決定に長時間を要することはない。更に、Ｓ１０６では、命令数＝Ｘにするという単純な処理で命令数を決定しており、決定は短時間で行われる。
【図面の簡単な説明】
【００４９】
【図１】本実施形態に示される上位機の概略構成図。
【図２】本実施形態に示される下位機の概略構成図。
【図３】上位機のメインメモリに構築される仮想ＣＰＵ等の説明図。
【図４】速度管理部の説明図。
【図５】ウェイト挿入タイミングの説明図。
【図６】送信された命令数と換算クロックＸの値とにより次回の命令数を決定する処理を示すフローチャート。
【符号の説明】
【００５０】
１３０      メディアデコーダ
１４５      クロック発生部
１６０      メインメモリ
１７０      ＥＰメモリ
１８０      コントローラ
１９０      メモリカード
２００      メディア
２３０      ＣＤデコーダ
２４５      クロック発生部
２７０      メインメモリ
２８０      コントローラ
２９０      バス
３４５      ソフトウェアクロック
３５０      速度管理部
３５２      命令数検出部
３５４      クロック換算部
３５６      比較部
３５８      ウェイトタイミング決定部
【図１】
0004397858.tif 000002
【図２】
0004397858.tif 000003
【図３】
0004397858.tif 000004
【図４】
0004397858.tif 000005
【図５】
0004397858.tif 000006
【図６】
0004397858.tif 000007