(57)【特許請求の範囲】
【請求項１】
対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションし、該エミュレーションが汎用コンピュータによって実行されるエミュレーション方法であって、
一連のグラフィックスコマンドを受け取るステップと、
前記グラフィックスコマンドをコマンドキャッシュに保存するステップと、
フレームエンドを検出すると、前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングするために、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行し、それによって、イメージデータをビデオメモリ（ＶＲＡＭ）内に保存する実行ステップとを含み、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する前記実行ステップが、
前記対象コンピュータシステムと完全に同期したビデオフレームを生成させるための前記汎用コンピュータの能力を評価する評価ステップと、
前記評価ステップにより、前記汎用コンピュータに前記能力があると判断した場合には、前記コマンドキャッシュ内の全ての前記コマンドを完全に実行して、前記フレームを完全にレンダリングするステップと、
前記評価ステップにより、前記汎用コンピュータに前記能力がないと判断した場合には、前記コマンドキャッシュ内の前記コマンドの第１部分を実行し、さらに、前記コマンドキャッシュ内の前記コマンドの第２部分の実行を飛ばして、前記フレームを部分的にレンダリングする、スキップステップと
を含むエミュレーション方法。
【請求項２】
フレームエンドが検出されるごとに前記評価ステップが繰り返され、該繰り返しによって連続する前記評価ステップが異なる評価を生成し、それにより、一部のフレームが完全にレンダリングされる一方、他のフレームが部分的にレンダリングされる請求項１のエミュレーション方法。
【請求項３】
前記評価ステップが、実時間とエミュレーション時間とを比較して、前記エミュレーションが前記対象コンピュータシステムより低速でフレームを生成しているか否かを決定する比較ステップを含む請求項１のエミュレーション方法。
【請求項４】
対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションし、該エミュレーションが汎用コンピュータによって実行されるエミュレーション方法であって、
一連のグラフィックスコマンドを受け取るステップと、
前記グラフィックスコマンドをコマンドキャッシュに保存するステップと、
フレームエンドを検出すると、前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングするために、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行し、それによって、イメージデータをビデオメモリ（ＶＲＡＭ）内に保存する実行ステップとを含み、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する前記実行ステップが、
前記対象コンピュータシステムと完全に同期したビデオフレームを生成させるための前記汎用コンピュータの能力を評価する評価ステップとを含み、
前記コマンドキャッシュ内に保存されている前記コマンドが、前記ＶＲＡＭ内にオブジェクトを書き込むためのドローイングコマンドを含み、
前記評価ステップが、
各フレームごとの全ドローイングコマンドと関連する全レンダリングエリアが、各フレームと関連するイメージエリアよりも広いか否かを決定する決定ステップと、
前記決定ステップにおいて、前記全レンダリングエリアが前記イメージエリアよりも広くないと決定された場合には、第１作動モードを選択するステップと、
前記決定ステップにおいて、少なくともＮの連続するフレームに関して、前記全レンダリングエリアが前記イメージエリアよりも広いと決定された場合には、第２作動モードを選択するステップ（ただし、Ｎは２よりも大きい整数である）と、
前記第１作動モードが選択された場合には、全フレームを完全にレンダリングするステップと、
前記第２作動モードが選択された場合には、実時間とエミュレーション時間とを比較して、前記エミュレーションが前記対象コンピュータシステムより低速でビデオフレームを生成しているか否かを決定し、前記比較の結果が第１結果である場合には、フレームを完全にレンダリングし、前記比較の結果が、前記第１結果と異なる第２結果である場合には、前記フレームを部分的にレンダリングするステップと
を含むエミュレーション方法。
【請求項５】
汎用コンピュータシステムとともに使用するコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
プリプロセッサモジュール及びグラフィックスプロセッサエミュレータモジュールを有し、該グラフィックスプロセッサエミュレータモジュールが対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションするように構成され、
前記プリプロセッサモジュールが、
一連のグラフィックスコマンドを受け取り、該グラフィックスコマンドをコマンドキャッシュに記憶する命令と、
フレームエンドを検出し、フレームエンドを検出すると、前記グラフィックスプロセッサエミュレータモジュールの実行を開始する命令とを有し、
前記グラフィックスプロセッサエミュレータモジュールが、
前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングし、それによって、ビデオメモリ（ＶＲＡＭ）内にイメージデータを記憶するように、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令を有し、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令が、
前記対象コンピュータシステムと完全に同期したビデオフレームを生成するための前記汎用コンピュータの能力を評価する評価命令と、
前記評価により、前記汎用コンピュータに前記能力があると判断した場合に機能して、前記フレームを完全にレンダリングするために前記コマンドキャッシュ内の全ての前記コマンドを完全に実行する命令と、
前記評価により、前記汎用コンピュータに前記能力がないと判断した場合に機能して、前記フレームを部分的にレンダリングするために、前記コマンドキャッシュ内の前記コマンドの第１部分を実行し、さらに、前記コマンドキャッシュ内の前記コマンドの第２部分の実行を飛ばす命令と
を有するコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項６】
前記プリプロセッサモジュール内の前記命令が、フレームエンドが検出されるごとに前記グラフィックスプロセッサエミュレータモジュールを呼び出し、該連続する呼び出しによって異なる評価を生成し、それにより、一部のフレームが完全にレンダリングされる一方、他のフレームが部分的にレンダリングされる請求項５のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
前記評価命令が、実時間とエミュレーション時間とを比較して、前記汎用コンピュータシステムが前記対象コンピュータシステムより低速でフレームを生成しているか否かを比較する比較命令を含む請求項５のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項８】
汎用コンピュータシステムとともに使用するコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
プリプロセッサモジュール及びグラフィックスプロセッサエミュレータモジュールを有し、該グラフィックスプロセッサエミュレータモジュールが対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションするように構成され、
前記プリプロセッサモジュールが、
一連のグラフィックスコマンドを受け取り、該グラフィックスコマンドをコマンドキャッシュに記憶する命令と、
フレームエンドを検出し、フレームエンドを検出すると、前記グラフィックスプロセッサエミュレータモジュールの実行を開始する命令とを有し、
前記グラフィックスプロセッサエミュレータモジュールが、
前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングし、それによって、ビデオメモリ（ＶＲＡＭ）内にイメージデータを記憶するように、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令を有し、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令が、前記対象コンピュータシステムと完全に同期したビデオフレームを生成するための前記汎用コンピュータの能力を評価する評価命令を有し、
前記コマンドキャッシュ内に保存されている前記コマンドが、前記ＶＲＡＭ内にオブジェクトを書き込むためのドローイングコマンドを含み、
前記評価命令が、
各フレームごとの全ドローイングコマンドと関連する全レンダリングエリアが、各フレームと関連するイメージエリアよりも広いか否かを決定する命令と、
全レンダリングエリアが前記イメージエリアよりも広くないと決定されたときに機能して第１作動モードを選択する命令と、
少なくともＮの連続するフレームに関して、前記全レンダリングエリアが前記イメージエリアよりも広いと決定されたときに機能して第２作動モードを選択する命令（ただし、Ｎは２よりも大きい整数である）と、
前記第１作動モードが選択されたときに機能して全フレームを完全にレンダリングする命令と、
前記第２作動モードが選択されたときに機能して、実時間とエミュレーション時間とを比較して、前記エミュレーションが前記対象コンピュータシステムより低速でビデオフレームを生成しているか否かを決定し、前記比較の結果が第１結果である場合には、フレームを完全にレンダリングし、前記比較の結果が、前記第１結果と異なる第２結果である場合には、前記フレームを部分的にレンダリングする命令と
を含むコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項９】
プリプロセッサモジュール及びグラフィックスプロセッサエミュレータモジュールを有し、該グラフィックスプロセッサエミュレータモジュールが汎用コンピュータよって実行され、さらに、対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションするように構成されたコンピュータデータが記録されたコンピュータ読み取り可能な記録媒体であって、
前記プリプロセッサモジュールが、
一連のグラフィックスコマンドを受け取り、該グラフィックスコマンドをコマンドキャッシュに記憶する命令と、
フレームエンドを検出し、フレームエンドを検出すると、前記グラフィックスプロセッサエミュレータモジュールの実行を開始する命令とを有し、
前記グラフィックスプロセッサエミュレータモジュールが、
前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングし、それによって、ビデオメモリ（ＶＲＡＭ）内にイメージデータを記憶するように、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令を有し、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令が、
前記対象コンピュータシステムと完全に同期したビデオフレームを生成するための前記汎用コンピュータの能力を評価する評価命令と、
前記評価により、前記汎用コンピュータに前記能力があると判断した場合に機能して、前記フレームを完全にレンダリングするために前記コマンドキャッシュ内の全ての前記コマンドを完全に実行する命令と、
前記評価により、前記汎用コンピュータに前記能力がないと判断した場合に機能して、前記フレームを部分的にレンダリングするために、前記コマンドキャッシュ内の前記コマンドの第１部分を実行し、さらに、前記コマンドキャッシュ内の前記コマンドの第２部分の実行を飛ばす命令と
を含むコンピュータデータが記録されたコンピュータ読み取り可能な記録媒体。
【請求項１０】
前記プリプロセッサモジュール内の前記命令が、フレームエンドが検出されるごとに前記グラフィックスプロセッサエミュレータモジュールを呼び出し、該連続する呼び出しによって異なる評価を生成し、それにより、一部のフレームが完全にレンダリングされる一方、他のフレームが部分的にレンダリングされる請求項９のコンピュータデータを記録したコンピュータ読み取り可能な記録媒体。
【請求項１１】
前記評価命令が、実時間とエミュレーション時間とを比較して、前記汎用コンピュータシステムが前記対象コンピュータシステムより低速でフレームを生成しているか否かを比較する比較命令を含む請求項９のコンピュータデータが記録されたコンピュータ読み取り可能な記録媒体。
【請求項１２】
プリプロセッサモジュール及びグラフィックスプロセッサエミュレータモジュールを有し、該グラフィックスプロセッサエミュレータモジュールが汎用コンピュータよって実行され、さらに、対象コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレーションするように構成されたコンピュータデータが記録されたコンピュータ読み取り可能な記録媒体であって、
前記プリプロセッサモジュールが、
一連のグラフィックスコマンドを受け取り、該グラフィックスコマンドをコマンドキャッシュに記憶する命令と、
フレームエンドを検出し、フレームエンドを検出すると、前記グラフィックスプロセッサエミュレータモジュールの実行を開始する命令とを有し、
前記グラフィックスプロセッサエミュレータモジュールが、
前記コマンドキャッシュ内の前記コマンドによって表されるフレームを少なくとも部分的にレンダリングし、それによって、ビデオメモリ（ＶＲＡＭ）内にイメージデータを記憶するように、前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実
行する命令を有し、
前記コマンドキャッシュ内の前記コマンドの少なくともいくつかを実行する命令が、前記対象コンピュータシステムと完全に同期したビデオフレームを生成するための前記汎用コンピュータの能力を評価する評価命令を有し、
前記コマンドキャッシュ内に保存されている前記コマンドが、前記ＶＲＡＭ内にオブジェクトを書き込むためのドローイングコマンドを含み、
前記評価命令が、
各フレームごとの全ドローイングコマンドと関連する全レンダリングエリアが、各フレームと関連するイメージエリアよりも広いか否かを決定する命令と、
全レンダリングエリアが前記イメージエリアよりも広くないと決定されたときに機能して第１作動モードを選択する命令と、
少なくともＮの連続するフレームに関して、前記全レンダリングエリアが前記イメージエリアよりも広いと決定されたときに機能して第２作動モードを選択する命令（ただし、Ｎは２よりも大きい整数である）と、
前記第１作動モードが選択されたときに機能して全フレームを完全にレンダリングする命令と、
前記第２作動モードが選択されたときに機能して、実時間とエミュレーション時間とを比較して、前記エミュレーションが前記対象コンピュータシステムより低速でビデオフレームを生成しているか否かを決定し、前記比較の結果が第１結果である場合には、フレームを完全にレンダリングし、前記比較の結果が、前記第１結果と異なる第２結果である場合には、前記フレームを部分的にレンダリングする命令と
を有するコンピュータデータが記録されたコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
本発明は一般に汎用コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレートするシステム及び方法に関し、更に詳細には、エミュレーションタイムがシステムのリアルタイム未満であるとエミュレーションシステムが決定した時にビデオフレームを適応的にスキップするシステム及び方法に関する。
【０００２】
【発明の背景】
本発明は、システムの動作をエミュレートするために専用グラフィックスプロセッサを有する汎用コンピュータを使用するシステム系に関する。例えば、様々な形式の専用グラフィックスプロセッサを使用するビデオゲーム機械には多くの種類（ブランド）がある。コンテンツプロバイダ（内容供給者）（例えばコンピュータゲーム作者およびその雇用者）は特定の特注コンピュータアーキテクチャによって実行されるように特別に設計されたソフトウェアを著作する。
【０００３】
図１に示すように、ビデオゲーム機械は一般に、中央処理装置（ＣＰＵ）５２、主記憶装置５４、グラフィックスプロセッサ５５、ビデオメモリサブシステム５６、ＣＤ‐ＲＯＭドライブ５８、及び、これらの構成要素を相互接続するための１つ又は複数の通信バス６０、６２を有する特殊目的（及び、しばしば、低コスト）コンピュータ５０として実装される。コンピュータ５０は、一般に、例えばジョイスティック６４などの種々のユーザ入力装置、及び、例えばテレビジョン６６及び１つ又は複数のオーディオスピーカ６８（テレビジョン６６に組み込まれるか、又は、テレビジョンから分離している）などの種々の出力装置を含む。多くのビデオゲーム機械におけるＣＰＵ５２は複雑かつ堅固なゲーム生成を容易にするために一般的なデスクトップコンピュータには備えられていない特注かつ非標準的な機能を有する。主記憶装置５４は、高速ランダムアクセスメモリ（ＲＡＭ）ならびに読取り専用メモリ（ＲＯＭ）の両方を備えることがある。ビデオメモリサブシステム５６は一般にビデオメモリアレイ（ＶＲＡＭ  ７０）、及び、例えば、ＶＲＡＭの一部分からもう一方の部分へデータのブロックをコピーするような動作のサポートを提供するＶＲＡＭロジック７２を有する。グラフィックスプロセッサ５５、及び／又は、ＶＲＡＭロジック７２は、一般に、フィルパターンを用いてオブジェクト（例えば、三角形および四辺オブジェクト）を満たすとか、クリッピング領域内のオブジェクト又はオブジェクトの部分を作図するとか、透明関連レンダリングのような各種三次元図形を扱う機能などのような特殊動作をサポートする。ＣＤ‐ＲＯＭドライブ５８は、ビデオゲームシステム５０によって処理されるべきプログラム及びデータを含むＣＤ‐ＲＯＭディスク（ＣＤ−ＲＯＭｓ）７４を受け取る。
【０００４】
ＣＰＵ５２と並列作動する例えば図１に示すグラフィックスプロセッサ５５のような特殊化されたハードウェアを使用すると、コンテンツプロバイダが、比較的月並みな中央処理装置（命令実行）ロジックを用いて、複雑な図形およびゲームを生成することを可能にする。その結果、この種のシステムが汎用コンピュータによってエミュレートされる場合には、コンピュータは、特殊化されたハードウェアが有する特殊化されたサポートロジックによって実施される全ての機能をエミュレートするために、非常に多数の命令を実行しなければならない。
【０００５】
理想としては、エミュレーションシステムは、エミュレートされるシステムの動作と同期した仕方において作動しなければならない。換言すれば、エミュレーションシステムによって実行されるゲーム又は他のプログラムは、専用グラフィックス処理システムによって実行される同一プログラムよりも進行が速過ぎるか、遅過ぎるか、どちらかであってはならない。更に詳細には、エミュレーションシステムは、理想的には、エミュレートされるシステムと精確に同じレートにおいて、同じビデオフレームを精確に生成しなければならない。ただし、エミュレーションシステムが非常に強力でない限り、長く複雑な（又は、少なくとも処理指向の）一連のレンダリングコマンドを用いて生成される少なくともこれらのビデオフレームに関しては、この理想的な性能目標は達成出来ないはずである。幾らかのビデオフレームは、それぞれのフレームイメージをレンダリングするために、他のビデオフレームよりも遥かに多くの処理を必要とする。
【０００６】
また、エミュレーションシステムが実装される幾らかのコンピュータは他のコンピュータよりも強力でないこともあり得る。エミュレーションシステムを実行する比較的低出力のコンピュータが供給できる毎秒当たりのフレーム数は、例えば、エミュレートされているビデオゲームシステムのフレーム数のわずかに半分であり得るが、比較的強力なコンピュータは、最も複雑なフレーム以外の全てのフレームに関して、エミュレートされるコンピュータと調子を合わせることが可能である。
【０００７】
本発明の目標は、様々な汎用コンピュータシステム上で実行可能であり、エミュレーションが行われているコンピュータシステムの最良能力を発揮して標的ビデオゲームシステムを忠実にエミュレートすることのできるエミュレーションモジュールを提供することにある。換言すれば、本発明の目標は、そこで作動しているコンピュータシステムに関する一切の特殊情報を持つことなしに、あらゆる特定プログラム（例えば、ビデオゲームプログラム）の実行をエミュレートするように、出来る限り忠実に自動的に適応するエミュレーションモジュールを提供することにある。エミュレーションモジュールは、標的システムによって生成されるビデオフレームと同じであるか、又は、非常に近似したビデオフレームを生成しなければならず、また、標的システムと密接に同期が保たれる仕方において、この種フレームを生成しなければならない。
【０００８】
本発明の他の目標は、他のフレームのスキッピングに起因するレンダリングされたフレームにおけるエラーを最小限にする対策を用いて、標的システムとエミュレーションシステムの同期を保つように、適応可能にビデオフレームをスキップする（即ち、スキップされたビデオフレームのレンダリングを回避する）グラフィックスプロセッサエミュレータ又はエミュレーションモジュールを提供することにある。
【０００９】
【本発明の概要】
要するに、本発明は、標的コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレートするエミュレーションシステム及び方法である。エミュレーションの方法は、コンピュータプログラムを実行している標的コンピュータシステムにおけるグラフィックスプロセッサの動作をエミュレートする。標的コンピュータシステムにおけるグラフィックスプロセッサは、ディスプレイされるべき一連のフレームを生成するように実行されつつあるプログラムによって生成されるグラフィックスコマンドを実行する。図形コマンドの対応する集合を実行することによってビデオメモリ内の各フレームはレンダリングされる。
【００１０】
エミュレーションの方法は、汎用コンピュータによって実行されるエミュレーションモジュールによって実施される。エミュレーションモジュールは、一連の図形コマンドを受け取り、コマンドキャッシュ内にグラフィックスコマンドを記憶する。フレームエンドを検出すると、エミュレーションモジュールは、コマンドキャッシュ内コマンドによって表されるフレームを少なくとも部分的にレンダリングし、それによって、ビデオメモリ（ＶＲＡＭ）内にイメージデータを記憶するように、コマンドキャッシュ内のコマンドの少なくとも幾つかを実行する。各フレームエンドにおいて、エミュレーションモジュールは、標的コンピュータシステムと完全に同期したビデオフレームを生成する汎用コンピュータの能力を評価する。評価が正であるときは、エミュレーションモジュールは、フレームを十分にレンダリングするようにコマンドキャッシュ内の全てのコマンドを完全に実行する。評価が負であるときは、エミュレーションモジュールは、コマンドキャッシュ内のコマンドの第１部分集合を実行し、フレームを部分的にレンダリングするように、コマンドキャッシュ内のコマンドの第２部分集合を実行をスキップする。
【００１１】
標的コンピュータシステムと調子を合わせる汎用コンピュータの能力は各フレームエンドにおいて再評価されるので、幾らかのフレームは十分にレンダリングされ、他のフレームは部分的にレンダリングされる。この評価は、エミュレーションが標的コンピュータシステムより更に低速でフレームを生成しているかどうかを決定するために現行時間値とエミュレーション時間値を比較することによって達成される。
【００１２】
コマンドキャッシュに記憶されているコマンドにはＶＲＡＭ内のオブジェクトを引き出すための引き出しコマンドが含まれる。各フレームに関して、評価モジュールは、当該フレームに関する全ての引き出しコマンドと関連する全レンダリングエリアが各フレームと関連するイメージエリア（スクリーンエリアとも呼ばれる）を超過するかどうかを決定する。全レンダリングエリアがイメージエリアを超過しないことが決定されると、動作のスパースモードが選定される。少なくともＮ個連続するフレームに関して、全レンダリングエリアがイメージエリアを超過することが決定されると、動作のフルモードが選定される。ここに、Ｎは正の整数である。
【００１３】
動作のスパースモードが選定されると、全てのフレームが完全にレンダリングされる。フルモードが選定されると、汎用コンピュータシステムが標的コンピュータシステムよりも低速でビデオフレームを生成しつつあるかどうかを決定するために、現行時間値がエミュレーション時間値と比較される。比較が第１結果を持つときは、フレームは十分にレンダリングされ、そうでないときは、フレームは部分的にレンダリングされる。
【００１４】
【発明の実施の形態】
作動原理
エミュレーションシステムは、ビデオゲームプログラム（または、例えばの三次元画像のような複雑な図形イメージを生成する他の任意のプログラム）を実行している標的システムの動作をエミュレートするので、本発明は、エミュレーションシステムと標的システムとの同期を密接に維持する。エミュレーションシステムは、標的システムによって通常実行されるはずの同じビデオゲームプログラムを実行し、ビデオゲームプログラムにおける各コマンドの完成に際して、エミュレートされている標的システムにおけるクロックタイム（エミュレーションタイムと呼ばれる）の経過を追跡する。エミュレーションシステムは、エミュレーションシステム内クロックによる決定に従ってエミュレーションタイムと「リアルタイム」を比較する。リアルタイムがエミュレーションタイムを超過しないならば、エミュレーションシステムは標的システムと調子を合わせており、ビデオゲームプログラムによって生成される全てのビデオフレームは完全にレンダリングされ、かつディスプレイされる。
【００１５】
リアルタイムがエミュレーションタイムを超過するときはいつでも、エミュレーションシステムが新規フレームを生成するために標的システムより長い時間を必要とすることが示される。この状態は「標的システムより遅れる」と呼ばれる。標的システムとの密接な同期を維持するために、エミュレーションシステムは、エミュレーションシステムのリアルタイムがエミュレーションタイムを超過しないようになるまで、１つ又は複数のビデオフレームのレンダリングを「スキップ」する。ただし、フレームを「スキップする」ことは、スキップされたフレームの生成を完全に回避することを意味しないことを理解されたい。多くのビデオフレームはその大部分を直前のフレームの内容に準拠するので、完全にフレームを回避することによって、しばしば、後続フレームは不正確に生成される。
【００１６】
本発明において、それに関するクリッピングウィンドウが現行フレームバッファの内側に所在する「クリップされた」引き出しコマンドを除き、スキップされたフレームの全ての図形コマンドが実行される。クリップされた引き出しコマンドの実行は、一般に、ビデオゲームにおける平均ビデオフレームのレンダリング時間の８０或いは９０パーセントを占有する。これらのコマンドの大部分をスキップすることはフレームのレンダリングを非常に加速し、同時に、後続フレームに対する意図しない二次的な影響を最小限化する。
【００１７】
更に、本発明は、エミュレーションシステムの動作を案内するために２つの作動モードを使用する。スパースモードと呼ばれるモードは、ビデオゲームプログラムがオブジェクトを有するフレームを生成するときに用いられ、そのエリア全体は、ディスプレイされるべき全イメージエリアより小さい。更に詳細には、毎４フレームの少なくとも１つを生成するために用いられるオブジェクトの全エリアは全イメージエリアより小さく、図形プロセッサエミュレータはスパースモードに置かれる。少なくともＮ（例えば３、または、４）個の連続したフレームを生成するために用いられるオブジェクトの全エリアが全イメージエリアよりも大きければ、図形プロセッサエミュレータは、フルモードに置かれる。
【００１８】
スパースモードにおいて、全てのフレームは完全にレンダリングされ、これは、ビデオゲームプログラムによって生成される全ての図形コマンドが実行され、ＶＲＡＭは全てのフレームに関して完全に更新されることを意味する。ただし、エミュレータが標的システムより遅れる場合には、幾らかのフレームはディスプレイされない。フレームバッファをディスプレイデバイスにコピーするには時間がかかるが、幾らかのフレームのディスプレイをスキップすることによってこの時間を節約できる。
【００１９】
フルモードにおいて、エミュレータが標的システムより遅れる場合には、フレームがスキップされ、部分的にレンダリングされることになる。ＭａｘＳｋｉｐ（例えば４または５）より多くの連続したフレームはスキップ不可能であり、従って、エミュレータが標的システムよりも遅い状態を継続する場合であっても、少なくとも約５つ毎に１つのフレームは完全にレンダリングされ、ディスプレイされる。ただし、大抵の実装において、エミュレータが１列の中の１又は２フレームよりも多くをスキップすることは、エミュレータが不適当にパワー不足のコンピュータによって実行されつつある場合を除き、異常である。
【００２０】
フレームバッファ
図２において、ＶＲＡＭ（ビデオランダムアクセスメモリ）用の利用マップを示す。ＶＲＡＭ  ７０は、その中でビデオフレームがレンダリングされるメモリである。フレームバッファ８０はビデオデータの１フレーム（または１つのスクリーン）を含むメモリのアレイ（配列体）である。一般に、実行されつつあるプログラムが一方のフレームバッファ内に新規イメージを描くことができるように、少なくとも２つのフレームバッファ８０がＶＲＡＭ内に割当てられ、もう一方のフレームバッファはディスプレイされる。従って、プログラムは２つのフレームバッファの間で交互作動可能であり、連続したフレーム期間中に、一方のフレームバッファに記入し、次に、もう一方に交互に記入する。
【００２１】
一般的なビデオゲームシステムにおいて、ＶＲＡＭ内フレームバッファの割当は固定されず、各特定のビデオゲームプログラムによって決定される。従って、幾らかのゲームプログラムは３個以上のＶＲＡＭ内フレームバッファを割当て、他のゲームプログラムはちょうど２つを使用する。説明を容易にするために、ゲームがただ２つのフレームバッファ８０を使用するものと仮定する。ただし、本発明はこの仮定には一切関係しない。
【００２２】
各フレームバッファ８０のサイズは、生成されるイメージの解像度に依存する。高い解像度の場合には、低い解像度の場合よりも大きいフレームバッファをひつようとする。従って、フレームバッファによって占有されるＶＲＡＭの部分は、プログラム作者および割当てられたフレームバッファの個数によって選択される解像度に応じて変化する。
【００２３】
フレームバッファに加えて、スプライト８２を記憶するためにＶＲＡＭ  ７０が使われる。これはデータの矩形アレイあり、一般に特定のイメージを表し、イメージのレンダリング中にフレームバッファ内にコピー可能である。ＶＲＡＭ  ７０の他の部分は、フィルパターン、カラータイル、種々雑多なイメージ、および、イメージのレンダリング期間中にビデオゲーム作者がゲームコピー（実行期間中）をフレームバファ内に持つことを望むあらゆる物を記憶するために使われる。
【００２４】
エミュレーションシステムのアーキテクチャ
図３において、本発明は、汎用コンピュータ１００にインストールされて、実行されるエミュレーションモジュール１０２として一般に実装される。例えば、限定的でなく、汎用コンピュータは、そのＣＰＵ  １０４としてＧ３マイクロプロセッサを用いるマッキントッシュコンピュータであっても差し支えなく、或は、Ｐｅｎｔｉｕｍ  ＩＩマイクロプロセッサを用いるＩＢＭ互換型コンピュータであっても差し支えない。本発明は、事実上あらゆる汎用コンピュータを用いて実装され得る。
【００２５】
コンピュータ１００は、一般に、中央処理装置（ＣＰＵ）１０４、主記憶装置１０６、ビデオメモリサブシステム１０８、ＣＤ‐ＲＯＭドライブ５８、クロック回路１０９、及び、これらの構成要素を相互接続する１つ又は複数の通信バス１１０を有する。コンピュータ１００は、一般に、例えばジョイスティック６４のような種々のユーザ入力装置、キーボード１１２、マウス１１４、及び、および、例えばビデオモニタ１１６及び１又は複数のオーディオスピーカー１１８などの種々出力装置を有する。主記憶装置１０６は、高速の等速呼出記憶装置（ＲＡＭ）ならびに例えば磁気ディスク、及び、読取り専用メモリー（ＲＯＭ）デバイスのような持久記憶装置を有する。ビデオメモリサブシステム１０８は、一般に、ビデオメモリアレイ（ＶＲＡＭ  １２０）およびＶＲＡＭの１つの部分からもう一方へデータのブロックをコピーするような動作のサポートを提供するＶＲＡＭロジック１２２を有する。ＣＤ‐ＲＯＭドライブ５８はプログラム及びコンピュータシステム１００によって処理されるべきデータを含むＣＤ‐ＲＯＭディスク（ＣＤ−ＲＯＭｓ）７４を受け取る。
【００２６】
主記憶装置１０６は、例えばジョイスティック６４からの入力信号のハンドリング、および、プログラムおよびデータのＣＤ‐ＲＯＭドライブ５８から主記憶装置１０６への移動などの基礎的システム動作を実施するオペレーティングシステム１３０を記憶可能である。主記憶装置１０６は、本発明の首題であるエミュレーションモジュール１０２、ならびに、１つ又は複数のＣＤ‐ＲＯＭ  ７４からコピーされるプログラム１３２及びＣＤ‐ＲＯＭ  ７４からコピーされるビデオデータ１３４も記憶可能である。エミュレーションモジュール１０２における種々のプログラムおよびデータ構造については次に検討する。
【００２７】
図４において、エミュレーションモジュールは標的システムのＣＰＵの動作をエミュレートする主要プロセッサエミュレータ１４０を含む。従って、エミュレータ１４０は、標的システムによって実行されるプログラム命令１４２の同じストリームの実行をエミュレートし、プロセス処理‖目標  標的システムによって処理されると同じ図形データを処理する。主要プロセッサエミュレータ１４０は、本発明の首題ではない。他のコンピュータの主要プロセッサをエミュレートするシステムは有名であり、本文書の首題ではない。関連の  図形システム系エミュレータ１５０の動作に関連した主要プロセッサ処理装置エミュレータ１４０の態様についてのみ本文書で検討することとする。
【００２８】
主要プロセッサエミュレータ１４０によって生成される主要な「結果」の１つは標的システムにおいて図形プロセッサに送られる一連の図形コマンド１５２である。図形システムエミュレータ１５０において、全ての図形コマンド１５２は図形コマンドプリプロセッサ１５４によってインタセプトかれ、かつ処理される。大抵の図形コマンドはプリプロセッサ１５４によってコマンドキャッシュ１５６に記憶される。しかし、幾らかのコマンドはプリプロセッサによって実行され、その後で廃棄される。特に、図形プロセッサに関する状態情報を要求する図形コマンド、および、ＶＲＡＭからメインメモリへダウンロードされるべき図形データを要求する図形コマンドは、プリプロセッサにより即刻処理され、その後で廃棄される。図形データの要求された状態情報は、実行されつつあるプログラムによる使用のために主要プロセッサエミュレータ１４０へ返される。
【００２９】
主要プロセッサエミュレータ１４２によって生成された他の「結果」はオーディオデータであり、音楽その他の音響を生成するためにオーディオサブシステム（図示せず）に送られる。
【００３０】
更に、プロセッサエミュレータ１４２は、ここで「エミュレーションタイム」と呼ばれる時間値１５５を生成する。これは、プログラム命令の実行によって標的システムにおいて経過する時間である。更に詳細には、主要プロセッサエミュレータ１４０は、主要プロセッサエミュレータ１４０によって実行されつつある命令ストリームにおける全ての命令を標的システムに実行させるＣＰＵのサイクル数を決定し、プログラムの実行期間中における各点において現行「エミュレーションタイム」を追跡するために実行合計へ前期の数値を加える。大抵の命令に関して、実行に必要とされるＣＰＵサイクル数は固定され、従って、各この種の命令がエミュレータによって実行されるとき、対応する時間増分（タイムインクリメント）がエミュレーションタイムに加えられる。その実行時間が例えばＣＤ‐ＲＯＭから主記憶装置までのＤＭＡデータ転送の完成外部事象に依存する命令に関しては、主要プロセッサエミュレータ１４０は、エミュレーションシステムによる実際の実行時間は対象システム上の実行時間と同じであるものと仮定し、従って、これらの命令に関しては、これらの命令の実際の実行時間だけ「エミュレーションタイム」をインクレメントする。
【００３１】
以下に検討するように、エミュレーションタイムはエミュレーションモジュールが実行されているコンピュータの「実時間」（即ち、クロックタイム）１６２と比較され、この比較は、ビデオフレームのレンダリングを何時スキップまたは部分的にスキップするかを決定するために用いられる。
【００３２】
完全なフレームをレンダリングするために必要な全てのコマンドキャッシュ１５６に累積された場合、エミュレーションタイムと現行「実時間」を比較した結果に従い、エミュレーションシステムが標的システムより遅れているかどうかに応じてＶＲＡＭ１２０内イメージをレンダリングするために図形プロセッサエミュレータ（ＧＰエミュレータ）１５８はキャッシュ内図形コマンドを実行するか、又は、累積したコマンドを部分的に実行する。
【００３３】
コマンドキャッシュ及び他のデータ構造
図４及び５において、ＧＰエミュレータ１５８によって実行された幾らかのグラフィックスコマンドがエミュレートされたグラフィックスプロセッサの状態を直接或いは間接的に変え、ＧＰエミュレータ１５８は、ＧＰ状態／モードアレイ１６０と呼ばれるアレイ内に状態およびモード情報を記憶することによってエミュレートされたグラフィックスプロセッサの現行状態を追跡する。好ましい実施形態において、ＧＰ状態／モードアレイ１６０は次の情報を含む：
＊  画素におけるイメージの幅および高さを示す解像度１７０。  ここに、画素数が多いことは高い解像度を示す。
＊  ＶＲＡＭ起点１７２。  システムのディスプレイ上にそこから現行イメージを生成する解像度パラメータと共にＶＲＡＭの部分を示す。
＊  フレームバッファの起点を示す引き出し起点１７４。  次のフレームがその中でレンダリングされる。幾らかのグラフィックスコマンド（例えばクリップされた引き出しコマンド）に使われるアドレスは引き出し起点に対して画定される。
＊  クリッピング境界１７６。  矩形領域を画定し、その中でクリップされたグラフィックスコマンドがレンダリングされる。クリップされたグラフィックスコマンドによって規定されたオブジェクトは、オブジェクトがレンダリングされていないクリッピング境界外に所在する。クリッピングされたグラフィックスコマンドによって規定されたオブジェクトの部分がクリッピング境界外に所在するならば、クリッピング境界外のオブジェクトの部分はレンダリングされないが、クリッピング境界内に所在する部分はレンダリングされる。
＊  引き出しモード１７６。  レンダリングに影響する１組のパラメータである。
【００３４】
一実施形態における引き出しモードパラメータ１７６を次に示す。
＊  透過性フラグ１８０。  透過性のハンドリンが可能かどうか示す。
＊  透過性モード１８２。  透過性がどのように扱われるべきかを指示する。
＊  ディザモード１８４。
＊  フィルパターン粗アドレス１８６。  ＶＲＡＭ内のどこにフィルパターンが記憶されるかを示す。特定グラフィックスコマンドにおける「微細アドレス」はどのフィルパターンを使用するかを示す。
＊  フィルパターンビット深さ１８８。  フィルパターンの各画素を表すために使われるグラフィックスデータのビット個数を示す。
＊  テクスチャウィンドウサイズ１９０。  画素数で規定される各々のテクスチャウィンドウの長さ及び高さを示す。
＊  優先順位フラグ１９２。
【００３５】
引き出しモードパラメータ１７６の正確な集合およびそれらのパラメータの定義は、その動作がエミュレートされている特定のグラフィックスプロセッサに完全に依存する。上述の引き出しモードパラメータ１７６の集合は徹底的であることを意図したものでなく、この種グラフィックスプロセッサの動作を教示することを意図したものでもなく、この種グラフィックスプロセッサを使用するシステム用のプログラムを書くことに関しては当該技術分野における当業者は周知である。
【００３６】
エミュレートされたグラフィックスプロセッサの状態の「初期スナップショット」２２０（図６）は、フレームに関するグラフィックスコマンドいずれかが処理される以前には、コマンドキャッシュ１５６に記憶されている。図形コマンドプリプロセッサ１５４は、各フレームに関するグラフィックスコマンドによって引き起こされる全てのグラフィックスプロセッサ状態変化を追跡するためにＧＰ状態／モードアレイ１６０を使う。プリプロセッサは、現行コマンドキャッシュの最終スナップショットフィールド２２２のＧＰ状態／モードアレイをコピーすることによって、各フレームの終端部においてエミュレートされたグラフィックスプロセッサの状態の「最終スナップショット」２２２（図６）を生成する。
【００３７】
従って、好ましい実施形態においては、ＧＰ状態／モードアレイ１６０の５つの例がある。１つはエミュレートされている現行グラフィックスプロセッサ、及び、２つのコマンドキャッシュ１５６内に記憶されているＯＰ状態の初期および最終スナップショットを追跡するため（図６および以下の検討参照）。
【００３８】
図６において、グラフィックスプロセッサエミュレータ１５８及びグラフィックスコマンドプリプロセッサ１５４は、グラフィックスエミュレーションサブシステム１５０の状態を追跡するために大局的状態記録２００を維持する（図４）。同様にグラフィックスエミュレーションサブシステム１５０は２つのコマンドキャッシュ１５６−１、１５６−２、を使う。１つは、実行されつつあるビデオゲームプログラムによって現在生成されつつあるフレームに関するグラフィックスコマンドを記憶するために用いられ、別の１つが前のフレームに関するグラフィックスコマンドを記憶するために使われる。下で説明するように、幾らかのグラフィックスコマンドは現行コマンドキャッシュ１５６には記憶されていない。理由は、それらがグラフィックスコマンドプリプロセッサによって処理され、その後で廃棄されることに因る。
【００３９】
一実施形態において、大局的状態記録２００は次のパラメータを含む。
＊  現行および前のキャッシュポインタ２０２、２０４。  ２つのコマンドキャッシュ１５６−１、１５６−２を指し示すため。グラフィックスプロセッサエミュレータがコマンドキャッシュを交換する時期であることを決定する解きにはいつでも、これらの２ポインタは交換される。
＊  Ｓｐａｒｓｅ  Ｍｏｄｅフラグ２０６。  エミュレータが「スパースモード」にあるときには、フラグはＴｒｕｅ（真）に設定され、フルモードにあるときには（Ｆｕｌｌ  Ｍｏｄｅ）、Ｆａｌｓｅ（偽）に設定される。Ｓｐａｒｓｅ  Ｍｏｄｅにおいて、エミュレータはＶＲＡＭ内の全てのフレームをレンダリングし、Ｆｕｌｌ  Ｍｏｄｅにおいては、幾らかのフレームがスキップされることもる。これは、それらがＶＲＡＭにおいて部分的にのみレンダリングされることを意味する。
＊  スキップされたフレームカウンタ２０８。  連続した何個のフレームがスキップされたかをカウントするために用いられる。
＊  Ｆｕｌｌ  Ｓｃｒｅｅｎ  Ｒｅｐａｉｎｔ  Ｃｏｕｎｔｅｒ  ２１０。  Ｓｐａｒｓｅ  Ｍｏｄｅにおいて、連続した何個のフレームが、その全エリアがスクリーンエリアを超過するオブジェクトを含むかをカウントするために使われる。
＊  Ｆｒａｍｅ  Ｔｉｍｅｏｕｔ  Ｃｏｕｎｔｅｒ  ２１２。  エミュレートされている標的システムが幾つかのフレームタイム中、例えばＣＤ‐ＲＯＭからデータをダウンロード中に停動したとしても、現行フレームがレンダリングされ、ディスプレイに送られるかを保証するために使われる。
＊  Ｅｍｕｌａｔｉｏｎ  Ｔｉｍｅパラメータ２１４。  標的システにおけるクロックタイムである現行エミュレーションタイムを追跡するために主プロセッサエミュレータ１４０によって生成されるエミュレーションタイム値１５５である。
【００４０】
各コマンドキャッシュ１５６は次のフィールドを含む。
＊  Ｉｎｉｔｉａｌ  Ｄｒａｗ  Ｓｔａｔｅ  ２２０。  グラフィックスプロセッサ状態の初期スナップショットである。このスナップショットは、新規フレームが開始するときはいつでも、グラフィックスプロセッサエミュレータによって生成される。
＊  Ｆｉｎａｌ  Ｄｒａｗ  Ｓｔａｔｅ  ２２２。  グラフィックスプロセッサ状態の最終スナップショットである。この最終スナップショットは、全てのグラフィックスコマンドを前処理することによってプリプロセッサにより生成される。そのコマンドがこのコマンドキャッシュに記憶されるフレームに関して標的システムのグラフィックスプロセッサ状態に影響する。
＊  Ｔｏｔａｌ  Ａｒｅａ  Ｒｅｎｄｅｒｅｄ  ２２４。  そのコマンドがこのコマンドキャッシュに記憶されているフレームにおいてレンダリングされるべき全てのオブジェクトの合計エリアの近似値である。
＊  Ｕｐｌｏａｄワードカウンタ２２６。  アップロードコマンドを完成するためにコマンドキャッシュに未だ記憶されていなければならないアップロードデータの量を追跡するためのダウンカウンタとしてグラフィックスコマンドプリプロセッサによって使われる。
＊  キャッシュモード２２８。  キャッシュに記憶されているコマンドの状態を示すためにＥｍｐｔｙ、Ａｃｔｉｖｅ、またはＳｋｉｐｐｅｄに設定される。
＊  ＦｏｕｎｄＧｌｏｂａｌ  Ｆｌａｇ  ２３０。  グラフィックスコマンドプリプロセッサがこのグラフィックスコマンドキャッシュ内に何等かのＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドを記憶すれば真に設定される。
＊  Ｗｒｉｔｅ  ｐｏｉｎｔｅｒ  ２３２。  次のグラフィックスコマンドワードが記入されるべきキャッシュ内ロケーションを示す。
＊  キャッシュされたコマンド２４０。  キャッシュ内に記憶されたグラフィックスコマンドである。
【００４１】
本発明の動作を説明するために、キャッシュ内に記憶されているグラフィックスコマンドを４つのカテゴリに分類する。
＊  アップロードコマンド２４２。  データのブロックを主記憶装置からＶＲＡＭへコピーするために用いられる。各アップロードコマンドにはＶＲＡＭに記憶されるべき現実のグラフィックスデータ２４４が後続する。
＊  状態変化コマンド２４６。  標的システムのグラフィックスプロセッサの状態を変え、従って、エミュレーションシステムによって実行されたときＯＰ状態記録１６０内の１つ又は複数のフィールドの値を変える。
＊  グローバルドローコマンド２４８。  ＶＲＡＭの１つの部分からもう一方にデータのブロックをコピーするため、および、ＶＲＡＭの指定領域を所定のソリッドカラーで満たすために用いられる。
＊  クリップされたドローコマンド２５０。  線、三角形、４辺オブジェクト、等を引くために使われる。これら全ては現在確立されているクリッピングウィンドウ内に所在する。
【００４２】
好ましい実施形態における２つのクラスのコマンド、グラフィックスプロセッサ状態情報を検索するための状態読取りコマンド、及び、データをＶＲＡＭから主記憶装置へダウンロードするためのダウンロードコマンドはコマンドキャッシュ１５６には記憶されることなく、これらのコマンドは、グラフィックスコマンドプリプロセッサ１５４（図４）によって即座に実行される。更に、下で説明されるように、幾らかのアップロードコマンドはコマンドキャッシュ１５６には記憶されない。
【００４３】
グラフィックスコマンドプリプロセッサ
グラフィックスコマンドプリプロセッサは、主プロセッサエミュレータ１４０（図４）によって発行された全てのグラフィックスコマンドを受け取る。図７Ａ及び７Ｂにおいて、プリプロセッサは大抵のグラフィックスコマンドを現行コマンドキャッシュ（２６０）内に記憶する。ただし、Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅ、及び、Ｄｏｗｎｌｏａｄコマンドはコマンドキャッシュ内に記憶されない。理由は、これらはグラフィックスコマンドプリプロセッサによって即座に実行され、２回も実行する必要のないことに因る。これらのコマンドによって生成された結果は呼出しプログラムに返される（即ち、ビデオゲームプログラムは主プロセッサエミュレータによって実行される）。次に検討するように、幾らかのアップロードコマンドは、即座に実行され、コマンドキャッシュには記憶されない。
【００４４】
プリプロセッサの動作を説明するために、全てのグラフィックスコマンドの集合は６グループに分割された。即ち、Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅコマンド、Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンド、Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンド、Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンド、Ｕｐｌｏａｄコマンド、及び、Ｄｏｗｎｌｏａｄコマンドである。
【００４５】
不完全なコマンド。
グラフィックスコマンドの一部分が受け取られて、当該コマンドが不完全であれば、コマンド部分は現行コマンドキャッシュ内に記憶される。
【００４６】
Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅコマンド。
グラフィックスプロセッサから受け取られた各Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅコマンドはグラフィックスコマンドプリプロセッサに関する状態情報を要求する。プリプロセッサは、要求された状態情報を主プロセッサエミュレータに即座に返すことによって応答する。（従って、主プロセッサエミュレータによって実行されつつあるプログラムに要求された情報を返す）、（２６２）。Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅコマンドはコマンドキャッシュ内に記憶されない。
【００４７】
Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンド。
各Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは、コマンドによって「レンダリングされたエリア」を決定し、（例えば、測定されたレンダリング済み画素の個数）現行フレームに関するレンダリング済み合計エリアにこの数を加算することにより（即ち、現行コマンドキャッシュ）（２６４）することによって処理される。各Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは現行コマンドキャッシュに記憶される。同様に、少なくとも１つのＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドが現行フレーム（２６４）内で見付かった時はいつでも、ＦｏｕｎｄＧｌｏｂａｌ  Ｆｌａｇ２３０と呼ばれるキャッシュ状態フラグがプリプロセッサによって真に設定される。
【００４８】
Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンド。
各Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは、切り抜き窓を考慮せずに、コマンドによって「レンダリングされたエリア」を決定し、（例えば、測定されたレンダリング済み画素の個数）現行フレームに関するレンダリング済み合計エリアにこの数を加算することにより（即ち、現行コマンドキャッシュ）（２６６）することによって処理される。各Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは、現行コマンドキャッシュに記憶される。更に、Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドが標的システムにおけるグラフィックスプロセッサ状態を修正するならば、現行ＧＰ状態／モードアレイはその変化（２６８）を反映して変えられる。
【００４９】
Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンド。
グラフィックスコマンドプリプロセッサからうけとられる各Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンドは現行コマンドキャッシュに記憶され、グラフィックスコマンドプリプロセッサにより、現行ＧＰ状態／モードアレイ（２７０）へ適切な変化を与えることにより処理される。Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンドが以前に指し示されたフレームバッファと異なるフレームバッファを指すようにＶＲＡＭ起点を変えるならば、これは、現行フレームの端部を識別する。プリプロセッサがフレームエンドを識別するときはいつでも、現行コマンドキャッシュに関する現行ＧＰ状態／モードアレイ１６０をＦｉｎａｌ  Ｓｎａｐｓｈｏｔ  ２２２にコピーし、次に、現行コマンドキャッシュ（２７２）に記憶されているグラフィックスコマンドを処理するためにグラフィックスプロセッサエミュレータが呼ばれる。ＶＲＡＭ起点を修正するＤｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンドはグラフィックスプロセッサエミュレータが呼ばれる以前に、現行コマンドキャッシュに記憶される。
【００５０】
フレームエンドを識別する２つの追加方法がある。主プロセッサエミュレータは、エミュレーションタイムを追跡するほかに、これはフレームが終わりそうな時点をマークするので、エミュレーションタイムが経過する１／６０秒毎に「フレームエンド」を生成する。フレームエンド信号は割込み信号として、または、グラフィックスコマンドへの特殊手順呼び出しとして実行され。当該技術分野における当業者は多数の他の方法を知っているはずである。好ましい一実施形態において、フレームエンド信号は、グラフィックスコマンドプリプロセッサへの手順コールとして実行される。
【００５１】
ここに示すように、フレームエンド信号は、これらシステムはテレビジョンへイメージを出力するので、大抵のビデオゲームシステムが新規フレームを生成する最大レートである１秒間に６０回生成される。また、米国においては、テレビジョンスクリーンの水平走査線の交番作動する半数の線は１秒間に６０回リペイントされる。多量のデータをロードするＵｐｌｏａｄコマンドの発生は、現行フレームバッファの大部分は重ね書きされていることが多いことを示す。これは、標的ビデオゲームシステムハ１／６０秒毎に新規フレームを生成している場合が多いことを示す。
【００５２】
フレームエンド信号がグラフィックスコマンドプリプロセッサによって受け取られると、現行コマンドキャッシュ（２７４）に関してＵｐｌｏａｄ  Ｆｌａｇがチェックされる。Ｕｐｌｏａｄ  Ｆｌａｇが設定（２７４−Ｙ）されると、フレームエンド信号はフレームエンドのマーキングのように扱われ、ＧＰ状態／モードのＦｉｎａｌ  Ｓｎａｐｓｈｏｔはコマンドキャッシュに記憶され、グラフィックスプロセッサエミュレータは現行コマンドキャッシュ（２７２）に記憶されているグラフィックスコマンドを処理するために呼び出される。
【００５３】
フレームエンド割込みが発生するときに、Ｕｐｌｏａｄ  Ｆｌａｇが設定されない（２７４−Ｎ）ならば、Ｆｒａｍｅ  Ｔｉｍｅｏｕｔ  Ｃｏｕｎｔｅｒはインクレメントされる（２７６）。Ｆｒａｍｅ  Ｔｉｍｅｏｕｔ  Ｃｏｕｎｔｅｒが事前に定義された最大値ＦＴＣｍａｘ（例えば５）（２７８−Ｙ）に等しいならば、フレームエンドは強制され、グラフィックスプロセッサエミュレータは現行コマンドキャッシュ（２７２）に記憶されているグラフィックスコマンドを処理するために呼び出される。その理由は、フレームエンドが検出されなかったとしても、ディスプレイは１秒当たり少なくともＮ（例えば１２）回だけ常に更新されることを確認するためである。例えば、幾らかのプログラムは、ディスプレイされつつある同一フレームバッファに新規イメージデータを直接書くはずである。これは異常であるけれども、エミュレーションシステムは多種多様なビデオゲームプログラミング技法と互換性を持つように設計されている。
【００５４】
Ｕｐｌｏａｄコマンド。  プリプロセッサによるアップロードコマンドの処理はアップロードのサイズ、及び、グラフィックスシステムエミュレータ（２８０）の現行モード（スパース或いはフル）に依存する。エミュレータがＳｐａｒｓｅモードにあるならば、Ｓａｆｅ  Ｆｌｕｓｈが実施され（図８Ａに関して以下に説明）、現行フレームならびに前のフレームの両方に関してコマンドキャッシュに以前に記憶された全てのコマンドを処理する。次に、Ｕｐｌｏａｄコマンドによって規定されたデータはメインメモリからＶＲＡＭに直接書き込まれ、ＵｐｌｏａｄフラグはＴｒｕｅに設定される。次に、Ｕｐｌｏａｄコマンドは十分に処理されたので廃棄される。
【００５５】
プリプロセッサがＦｕｌｌ  Ｍｏｄｅにあり、アップロードされるべきデータ量（Ａ）がしきい値より大きいか（例えば、コマンドキャッシュサイズの４分の１）、または、（Ｂ）現行コマンドキャッシュ内の空間的余裕が溢れる場合には、Ｓａｆｅ  Ｆｌｕｓｈが実施され、Ｕｐｌｏａｄコマンドによって規定されたデータがメインメモリからＶＲＡＭへ直接書き込まれ、ＵｐｌｏａｄフラグはＴｒｕｅに設定される。次に、十分に処理されたのでＵｐｌｏａｄコマンドは廃棄される。
【００５６】
プリプロセッサがＦｕｌｌ  Ｍｏｄｅにあり、アップロードされるべきデータの量がＳａｆｅ  Ｆｌｕｓｈを開始させるには十分でない場合には、アップロードされるべきデータは現行コマンドキャッシュに累積される（即ち、記憶される）。従って、この場合、Ｕｐｌｏａｄコマンドは、グラフィックスプロセッサミュレータによる処理のためにコマンドキャッシュ内に記憶されている。
【００５７】
Ｄｏｗｎｌｏａｄコマンド。  ダウンロードコマンドは、Ｄｏｗｎｌｏａｄコマンド（２８２）によって規定されたＶＲＡＭの部分に記憶されたデータを即座に返すことにより、プリプロセッサによって即座に処理される。次に、Ｄｏｗｎｌｏａｄコマンドは、十分に処理されたので、廃棄される。更に詳細には、Ｄｏｗｎｌｏａｄコマンドによって要求されるデータの量が非常に小さい（例えば、１、２画素）ならば、データがコマンドキャッシュ内に記憶されているコマンドによって改変されていても、プリプロセッサはアドレスされたＶＲＡＭデータを単に返す。この技法は、少量のダウンロードは、現行フレームの外のＶＲＡＭの状態を決定するためにビデオゲームプログラムによって、殆ど常に使用されているという観察に基づくものである。
【００５８】
Ｄｏｗｎｌｏａｄコマンドによって要求されたデータの量が小さくないならば、コマンドキャッシュに記憶されているコマンドは、メインメモリにダウンロードされるべきＶＲＡＭの部分に影響するかどうかを調べるために走査される。そうであれば、Ｓａｆｅ  Ｆｌｕｓｈが実施され、コマンドキャッシュに現在記憶されている全てのコマンドを実行させ、Ｄｏｗｎｌｏａｄコマンドに先行する全てのコマンドを考慮するためにＶＲＡＭの内容を更新する。最後に、要求されたデータはＶＲＡＭからメインメモリへコピーされ、ダウンロードコマンドは廃棄される。他の一実施形態において、Ｄｏｗｎｌｏａｄコマンドをハンドリングするこの第２の方法は全てのＤｏｗｎｌｏａｄコマンド用に使用可能である。ダウンロードされるべきＶＲＡＭの部分に影響するコマンドがコマンドキャッシュ内に記憶されていないならば、規定されたＶＲＡＭ部分がメインメモリにコピーされる前には、ＶＲＡＭには一切の変化を生じない。
【００５９】
コマンドキャッシュフラシュ方法
グラフィックスプロセッサエミュレータは、前および現在のコマンドキャッシュに記憶されているコマンドを処理する３つの異なる方法を有する。Ｓａｆｅ  Ｆｌｕｓｈは、前のコマンドキャッシュ内の全てのコマンド、及び、現行コマンドキャッシュ内の全てのコマンドを実行する。ただし、前のコマンドキャッシュが以前に実行された（十分に或いは部分的に）場合には、再度処理されない。従って、前のフレームは、十分にあり、そして、電流現行フレームは、十分にある（任意あらゆるケースにおいて放棄される）（以前にそれが放棄されなかったならば、放棄される）。
【００６０】
更に詳細には、図８Ａにおいて、Ｓａｆｅ  Ｆｌｕｓｈ手順は、前のコマンドキャッシュからのＣａｃｈｅ  Ｍｏｄｅは、Ｅｍｐｔｙであるかどうかをチェックする。（前のフレームは十分に又は部分的にレンダリングされ、前のコマンドキャッシュ内コマンドは十分に又は部分的に処理されたことを示す）（２９０）。そうでないならば（２９０−Ｎ）、前のフレームは、前のコマンドキャッシュ（２９２）内の全てのコマンドを実行することによって十分にレンダリングされている。前のコマンドキャッシュの状態には関係なく、現行フレームは、現行コマンドキャッシュ（２９４）内の全てのコマンドを実行することによって十分にレンダリングされている。
【００６１】
Ｆｒａｍｅ  Ｆｌｕｓｈは、前のコマンドキャッシュ内コマンドを部分的に実行し、現行コマンドキャッシュ内コマンドを十分に実行する。フレームが「部分的に」レンダリングされるときには、コマンドキャッシュ内の全てのコマンドは、現行フレームバッファを更新するＣｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドを除き、実行される。ただし、現行フレームバッファを更新するＣｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドの実行は、通常、平均ビデオフレームをレンダリングするために必要な時間の８０から９０パーセントを占めるので、これらのコマンド（これらのコマンドによって引き起こされたあらゆるＧＰ状態モード変化を除く）の実行をスキップすることは平均してレンダリングタイムを著しく短縮する。
【００６２】
更に詳細には、図８Ｂにおいて、Ｆｒａｍｅ  Ｆｌｕｓｈ手順は、前のコマンドキャッシュからのＣａｃｈｅ  ＭｏｄｅがＥｍｐｔｙであるかどうかを調べる（前のフレームが十分または部分的にレンダリングされ、前のコマンドキャッシュ内の全てのコマンドが十分または部分的に処理されたことを示す）（３００）。そうでないならば（３００−Ｎ）、前のフレームは、前のコマンドキャッシュ（３９２）内コマンドの幾らかを実行することによって部分的にレンダリングされる。前のコマンドキャッシュの状態とは関係なく、現行フレームは、現行コマンドキャッシュ（３０４）内の全てのコマンドを実行することによって、十分にレンダリングされる。部分的にレンダリングする手順については、以下の図１０に関して検討することとする。
【００６３】
複数の連続するフレームがスキップされた場合に限りＫｉｃｋ  Ｏｕｔフラッシュが用いられる。これは、エミュレーションシステムがたまたま単一フレームをスキップすることによって標的システムに追いつくことができなかったときに限り起こり得る。図８Ｃにおいて、Ｋｉｃｋ  Ｏｕｔフラッシュ手順は、前のコマンドキャッシュ（３１０）内コマンドを部分的に実行し、現行コマンドキャッシュ内コマンドは実行しない。
【００６４】
図８Ｄにおいて、コマンドキャッシュの処理が完了するときに、次のフレームのグラフィックスコマンドの余地はコマンドキャッシュを交換することによって作られる。更に詳細には、スワップコマンドキャッシュ手順３２０は、前の、及び、現行キャッシュポインタ（３２２）を交換し、前のコマンドキャッシュに関する最終ＧＰ状態スナップショットを初期ＧＰ状態スナップショットにコピーし、現行コマンドキャッシュに関するＣａｃｈｅ  ＭｏｄｅをＡｃｔｉｖｅ（３２６）に設定する。Ａｃｔｉｖｅモードは、グラフィックスコマンドが、主プロセッサエミュレータから受け取られるにつれて、現行コマンドキャッシュに記憶され得ることを示す。
【００６５】
コマンドキャッシュ内コマンドの処理
図９において、コマンドキャッシュ内コマンドを十分に処理するための手順３３０は、その中に記憶された順序（３３１）に従って、コマンドキャッシュ内の各グラフィックスコマンドを処理する逐次的に処理することである。Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンドはコマンド（３３２）による規定に従って現行ＧＰ状態／モードを更新することによって処理される。Ｕｐｌｏａｄコマンドは、コマンドによって規定されたイメージデータをＶＲＡＭ（３３４）の指定された領域に記憶することにより処理される。プリプロセッサによって実行されたＵｐｌｏａｄコマンドはコマンドキャッシュには記憶されず、従って、この手順によって実行されないことに注意されたい。
【００６６】
Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは、コマンド（３３６）に従ってＶＲＡＭの内容を更新することによって処理される。Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは、ＶＲＡＭの１つの部分からもう一方までデータのブロックをコピーするため、及び、ＶＲＡＭの指定された領域をソリッドカラー（べた塗り）で満たすために用いられる。
【００６７】
Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは、現在の確立されている切り抜き窓（３４０）の中で、例えばＶＲＡＭ内の線状、三角形、または、４辺形オブジェクトのようなオブジェクトをレンダリングすることによって処理される。切り抜き窓は現行ＧＰ状態／モードアレイによって規定される。幾らかのＣｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは、切り抜き窓を改変することもあり得る。この場合には、切り抜き窓は、当該コマンドによって規定されたオブジェクトがＶＲＭ（３３８）内でレンダリングされる以前に更新される。
Ｄｏｗｎｌｏａｄコマンド、及び、Ｒｅａｄ  Ｄｒａｗｉｎｇ  Ｓｔａｔｅコマンドは、好ましい実施形態におけるコマンドキャッシュ内には記憶されない。従って、コマンドキャッシュ（３４２）内のコマンドを十分に処理するためには、手順３３０によっては処理されない。
【００６８】
コマンドキャッシュの終端部に到達すると、キャッシュ内コマンドが十分に処理されたことを示すために現行コマンドキャッシュに関するＣａｃｈｅ  ＭｏｄｅはＥｍｐｔｙの設定される。Ｕｐｌｏａｄ、及び、ＦｏｕｎｄＧｌｏｂａｌ  ＦｌａｇｓはＦａｌｓｅに設定され、Ｗｒｉｔｅポインタはコマンドキャッシュ（３４４）の開始点を指し示すように設定される。後の方のステップは新規フレーム用グラフィックスコマンドを記憶するためにコマンドキャッシュの準備を整える。
【００６９】
図１０Ａ、及び、１０Ｂにおいて、部分的なレンダリング手順３５０は、フレームがただ部分的にレンダリングされる場合には、前のフレーム（即ち、部分的にレンダリングされつつあるフレームの直前のフレーム）が通常レンダリングに関して最良の開始点であるという仮定の上に成立する。
【００７０】
部分的レンダリング手順の重要な他の仮定条件は、部分的レンダリング手順によって生成されたイメージはディスプレイには決して送られないということである。従って、当該フレームバッファの外側のＶＲＡＭの多くの後続イメージに影響するので、処理されつつあるコマンドキャッシュ内の最も重要なコマンドは、コマンドキャッシュに関してフレームバッファの外のＶＲＡＭの内容を改変するコマンドである（これは、部分的レンダリング期間中に実行されるＣｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは前のコマンドキャッシュに関してフレームバッファの外側でＶＲＡＭに影響する唯一のコマンドであるという理由に因る。）ただし、コマンドキャッシュに関してフレームバッファ内に記憶されるイメージは後続フレームを生成するためのスタートポイントとして使用可能であるので、イメージをレンダリングするために使われる計算資源を最小限化すると同時に当該イメージをできる限り正確にレンダリングすることが好ましい。
【００７１】
フレームの部分的レンダリングと関連する最も困難な問題はＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドをどのように扱うかということである。例えば、部分的にレンダリングされるべきフレームが１つ又は複数のグローバルコマンドを含む場合には、それらのコマンドは、部分的にレンダリングされているフレームに関してフレームバッファに重ね書きすることが出来る。Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは、他のコマンドがフレームイメージを生成するために使われる以前にべた塗りによってフレームバッファに重ね書きするために用いられることがある。従って、部分的に実行されるべきコマンドキャッシュが１つ又は複数のＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドを含むときには、コマンドキャッシュ内コマンドを部分的に実行し、次に、前のフレームを、部分的にレンダリングされつつあるフレームに関するフレームバッファへコピーすることが好ましい。
【００７２】
ただし、コマンドキャッシュ内Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドに関しては、重ね書きすることが可能であり、それによって、前のフレームを削除することが可能である。そのような場合、前のフレームを現行フレームバッファにコピーする以前にグローバルコマンドを実行することは、前のフレームを現行フレームバッファにコピーする目的を無意味にする。この問題を回避するために、コマンドキャッシュが少なくとも１つのＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドを含むときには、部分的レンダリング手順３５０はＣｏｐｙＬａｓｔフラグを真に設定し、前のフレームは最後にコピーされるべきであることを表示する。更に、コマンドキャッシュ内コマンドが実行されるにつれて、前のフレームのどこかの部分に重ね書きされたか、その可能性があるか、について各Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドはチェックされ、次に、前のフレームは、Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドが実行されて、ＣｏｐｙＬａｓｔフラグがクリアされる以前に現行フレームバッファにコピーされる。
【００７３】
フレームに関するコマンドキャッシュがＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドを含まないときには、コマンドキャッシュ内コマンドを実行する以前に、前のフレームを現行フレームバッファへコピーすることが最も好ましい。例えば、幾らかのビデオゲームは、一連のフレームに関して主記憶装置からＶＲＡＭへデータをアップロードすることによってスクリーンイメージの部分において映画を上演する（「プレイムービー」）。これらのＶＲＡＭ  ｕｐｌｏａｄｓを実行する前に前のフレームをコピーすることによって、ＶＲＡＭ  ｕｐｌｏａｄｓは、前のフレーム全体に亙り所与優先順位である。
【００７４】
部分的なレンダリング手順３５０はＦｏｕｎｄＧｌｏｂａｌ  ＦｌａｇがＴｒｕｅ（３５２）であるかどうかを調べるチェックから始まる。そうでないならば（３５２−Ｎ）、処理されつつあるコマンドキャッシュ（ここでは便宜上コマンドキャッシュと呼ぶこととする）内にＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは無い。従って、従来のフレームは、「現行フレーム」に関してフレームバッファにコピーされる（即ち、そのコマンドがこの手順によって処理されつつあるコマンドキャッシュに関するフレームバッファ）およびＣｏｐｙＬａｓｔ  ＦｌａｇはＦａｌｓｅ（３５４）に設定される。ＦｏｕｎｄＧｌｏｂａｌ  ＦｌａｇがＴｒｕｅ（３５２−Ｙ）であるならば、ＣｏｐｙＬａｓｔ  ＦｌａｇはＴｒｕｅ（３５５）に設定され、前のフレームのコピー遅延する。
【００７５】
次に、コマンドキャッシュ内コマンドは、キャッシュ（３５６）に書き込まれた順序と同じ順序で部分的に実行される。
【００７６】
実行されるべき次のコマンドがＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドであるならば、手順は、ＣｏｐｙＬａｓｔ  ＦｌａｇがＴｒｕｅに設定されているかを決定し、更に、前のフレーム（３５７）に関するフレームバッファのいずれかの部分にコマンドが重ね書きしたかも決定する。前のフレームに関するフレームバッファは、処理されつつあるコマンドキャッシュに関して初期スナップショット２２０（図６）におけるＶＲＡＭ起点１７２（図５）（Ａ）および（Ｂ）フレームの解像度１７０（図５）によって識別されるＶＲＡＭの部分として識別される。これらの条件のいずれか又は両方がＴｒｕｅ（３５７−Ｎ）ではないならば、Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドは単に実行される（３５８）。そうでない場合には、これらの条件の両方がＴｒｕｅ（３５７−Ｙ）であれば、従来フレームに関するフレームバッファは現行フレームに関するフレームバッファにコピーされ、Ｇｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドが実行される（３５８）以前に、ＣｏｐｙＬａｓｔ  ＦｌａｇはＦａｌｓｅ（３５９）にリセットされる。ＣｏｐｙＬａｓｔ  Ｆｌａｇはリセットされて、従来フレームが現行フレームに関するフレームバッファにコピーされたことを示す。
【００７７】
Ｄｒａｗｉｎｇ  Ｓｔａｔｅ  Ｃｈａｎｇｅコマンドは、コマンド（３６２）による規定に従って、現行ＧＰ状態／モードを更新することによって処理される。Ｕｐｌｏａｄコマンドは、コマンドによって規定されたイメージデータをＶＲＡＭ（３６３）の指定領域に記憶することによって処理される。プリプロセッサによって実行されたＵｐｌｏａｄコマンドはコマンドキャッシュには記憶されず、従って、この手順によって実行されないことに留意されたい。
【００７８】
Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドは、ＧＰ状態（３６４）のＤｒａｗｉｎｇ  Ｍｏｄｅを更新する範囲内で常に実行される。しかし、切り抜き窓が現行フレームの引き出し領域によって囲まれているならば、Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドのレンダリング態様は実施されない（即ち、現行フレームバッファは現行コマンドキャッシュに関するＤｒａｗｉｎｇ  ＯｒｉｇｉｎおよびＲｅｓｏｌｕｔｉｏｎによる規定に従う）（３６５−Ｙ、３６６）。好ましい一実施形態において、切り抜き窓と現行引き出し領域の比較は、引き出し領域と切り抜き窓の間の不整合に関して小さい許容差を含む（例えば、任意の方向における１６個の画素）。切り抜き窓が現行フレームの引き出し領域に囲まれていないならば、Ｃｌｉｐｐｅｄ  Ｄｒａｗｉｎｇコマンドによって規定されたオブジェクトがレンダリングされる（３６７）。
【００７９】
コマンドキャッシュの端部に到達すると、ＣｏｐｙＬａｓｔ  Ｆｌａｇがチェックされる（３６８）。ＣｏｐｙＬａｓｔ  ＦｌａｇがＦａｌｓｅであれば（３６８−Ｎ）、前のフレームが現行フレームに関するフレームバッファ既にコピーされたことを示し、次に、Ｃａｃｈｅ  ＭｏｄｅをＥｍｐｔｙに設定することによってコマンドキャッシュはクリアされ（キャッシュ内コマンドが２回に亙って実行されることを防止する）、ＵｐｌｏａｄおよびＦｏｕｎｄＧｌｏｂａｌ  ＦｌａｇｓをＦａｌｓｅへ設定し、Ｗｒｉｔｅポインタがコマンドキャッシュ（３６９）の開始点を指すように設定する。ＣｏｐｙＬａｓｔ  ＦｌａｇがＦａｌｓｅ（３６８−Ｙ）であるならば、従来フレームは、現行フレームに関してフレームバッファにコピーされ、ＣｏｐｙＬａｓｔ  ＦｌａｇはＦａｌｓｅ（３７０）に設定され、次に、コマンドキャッシュは上述したようにクリアされる（３６９）。
【００８０】
代替実施形態において、フレームが部分的にレンダリングされるとき、コマンドキャッシュ内コマンドの処理に先立って、前のフレームは常に現行フレームに関するフレームバッファにコピーされる。更に他の一実施形態において、コマンドキャッシュ内コマンドの処理に先立って、現行フレームに関するフレームバッファへ従来フレームをコピーする。部分的なレンダリング手順は、濾過し、そして、（引き出すことの場所的な不整合に関する小さい許容差を以て）現行フレームに関するフレームバッファ内の場所にべた塗りで重ね書きするあらゆるＧｌｏｂａｌ  Ｄｒａｗｉｎｇコマンドを実行しない。
【００８１】
フレームエンド検出時のフレーム処理
図１１Ａ、及び、１１Ｂにおいて、フレームエンドがプリプロセッサによって検出されると、フレームエンド処理手順３７１が呼び出される。この手順３７１は図４に示すグラフィックスプロセッサエミュレータ１５８によって実施される。手順３７１の初期ステップは、エミュレータがフルモード又はスパースモードにあることを決定するために使われる。スパースモードにおいて、前および現行フレームは常に十分にレンダリングされるが、エミュレータが標的コンピュータシステムより遅い場合には、現行フレームのディスプレイはスキップされる。フルモードにおいては、エミュレータが標的コンピュータシステムより遅れている場合には現行フレームの処理はスキップされる。ただし、複数の連続するフレームがスキップされるときは、特別措置が講じられる。これらのフレームを部分的にレンダリングし、更に、十分にレンダリングして、少なくとも約５フレーム毎にディスプレイする。
【００８２】
現行フレームに関して、グローバル及びクリップされたコマンドよってレンダリングされた全エリアがスクリーンエリア（即ち、各フレームに関してフレームバッファのサイズ）（３７２）より小さい場合には、スパースモードフラグは真に設定され、フルスクリーンリパイントカウンタがクリアされる（３７４）。そうでないならば（３７２−Ｎ）、エミュレータが現在スパースモードにあり（３７６）ＦＳＲカウンタがその限界値（３７８）でなければ、ＦＳＲカウンタはインクレメントし（３８０）、エミュレータはスパースモードのままである。エミュレータがＳＭに設定されているときには、いつでも、ＳＭに留まり、フレームの処理はステップ３８４において継続する（以下に述べる）。
【００８３】
一方、エミュレータがＦｕｌｌ  Ｍｏｄｅにある場合（偽に設定されたＳｐａｒｓｅ  Ｍｏｄｅフラグによって示される）（３７６−Ｎ）、又は、またはＦＳＲＣがその限界値（３７８−Ｙ）にある場合には、エミュレータはＦｕｌｌ  Ｍｏｄｅに設定され（スパースモードフラグ＝Ｆａｌｓｅ）、（３８２）、フレームの処理はステップ４００（図１１Ｂ）において継続する。
【００８４】
ステップ３８４において、エミュレータは、標的コンピュータシステムより遅れているかどうかを決定する（即ち、フレーム生成速度がどちらが大きいか）。これは、エミュレータが実行されているコンピュータの「実時間」値を比主プロセッサエミュレータによって生成さるエミュレーションタイムと較することによって決定される。エミュレータが遅れていないならば（３８４−Ｎ）、Ｓａｆｅ  Ｆｌｕｓｈ（手順２９０（図８Ａ）が実施される（３８６）。次に、エミュレータは、標的コンピュータシステムに関してエミュレータの実時間がエミュレーションタイムと同期するまで待ち、その後で、流現行フレームバッファをディスプレイ（３８８）に送るので、ユーザはそれを見ることができる。最終的に、コマンドキャッシュは交換される（３９０）。すなわち、図８Ｄを参照してすでに述べたように、コマンドキャッシュスワップ手順３２０が呼び出される。
【００８５】
エミュレータがＳｐａｒｓｅ  Ｍｏｄｅにあるが、標的コンピュータシステムより遅れている（３８４−Ｙ）場合には、ともかく、安全フラッシュ手順２９０（図８Ａ）が実施される（３９２）。しかし現行フレームはディスプレイされない。スキップされたフレームカウンタはインクレメントされ（３９４）、ＭａｘＳｋｉｐ値と比較される（３９５）。ＭａｘＳｋｉｐに関する一般的な値は５であるが、代替実施形態においては、３から８までの値に設定しても差し支えない。ＳＦカウンタがＭａｘＳｌｃｉｐ（３９５−Ｎ）に等しくないならば、コマンドキャッシュは交換されるが（３９６）、現行フレームはディスプレイされない。ＳＦカウンタがＭａｘＳｋｉｐに等しいならば（３９５−Ｙ）、現行フレームバッファはディスプレイに送られ、そして、ＳＦカウンタはクリアされる。更に、コマンドキャッシュは交換される（３９６）。
【００８６】
図１１Ｂにおいて、エミュレータがＦｕｌｌ  Ｍｏｄｅにあるならば、エミュレータは、エミュレータが実行されているコンピュータの「実時間」値と主プロセッサエミュレータ（４００）によって生成されるエミュレーションタイムを比較し、標的コンピュータシステムに遅れているかどうかを決定する。エミュレータが遅れていないならば（４００−Ｎ）、フレームフラッシュ手順（３００図８Ｂ）が実施される（４０２）。次に、エミュレータは、現行フレームバッファをディスプレイ（４０４）へ送る前にエミュレータの実時間が標的コンピュータシステムに関するエミュレーションタイムと同期するまで待つ。その結果、ユーザはこれを見ることが出来る。最終的に、コマンドキャッシュは、コマンドキャッシュ交換手順３２０（図８Ｄ）を呼び出すことによって交換される（４０６）。
【００８７】
エミュレータがＦｕｌｌ  Ｍｏｄｅにあり、標的コンピュータシステムよりも遅れている（４００−Ｙ）場合には、ＳＦカウンタはインクレメントされ（４０８）、ＭａｘＳｋｉｐ値（４１０）と比較される。ＳＦカウンタがＭａｘＳｋｉｐ（４１０−Ｎ）に等しくないならば、現行コマンドキャッシュに関するＣａｃｈｅ  ＭｏｄｅはＳｋｉｐｐｅｄ（４１２）に設定され、それが処理されなかったことを示す。前のコマンドキャッシュに関するＣａｃｈｅ  Ｍｏｄｅもスキップされ（４１４−Ｙ）、前のフレームを部分的にレンダリングするためにＫｉｃｋ  Ｏｕｔ  Ｆｌｕｓｈが実施される（４１６）。次に、コマンドキャッシュは、次のフレーム（４１８）に関するグラフィックスコマンド受ける準備をするために交換される。前のコマンドキャッシュに関するＣａｃｈｅ  ＭｏｄｅがＳｋｉｐｐｅｄ（４１４−Ｎ）に等しくないならば、コマンドキャッシュは交換される（４１８）。
【００８８】
ＳＦカウンタがＭａｘＳｋｉｐ（４１０−Ｎ）に等しいならば、前のフレームを部分的にレンダリングし（以前にレンダリングされていないならば）、現行フレームを十分にレンダリングするためにするためにフレームフラッシュが実施される（４２０）。次に、現行フレームバッファはディスプレイに送られ、ＳＦカウンタはクリアされ（４２２）、コマンドキャッシュが交換される（４１８）。
【００８９】
代替実施形態
本発明は、コンピュータ読取り可能記憶媒体に埋め込まれたコンピュータプログラムメカニズムを含むコンピュータプログラム製品として実行され得る。例えば、コンピュータプログラム製品は図３に示すエミュレーションモジュール１０２、または、図４に示すグラフィックスシステムエミュレータ１５０を形成するプログラムモジュールを含み得る。１つ又は複数のエミュレーションモジュールは、ＣＤ‐ＲＯＭ、磁気ディスク記憶製品、または、他のコンピュータ読取り可能データ又はプログラム記憶製品に記憶される。コンピュータプログラム製品内のソフトウェアモジュールは、インターネットを経て、または、搬送波を用いたコンピュータデータ信号の伝送によって電子的に配分可能である（１つ又は複数のソフトウェアモジュール又埋め込み可能である）。
【００９０】
本発明は少数の特定実施形態に関して説明したが、記述は本発明の実例であり、本発明を制限するものではない。当該技術分野における当業者にとっては、添付特許請求の範囲によって定義される本発明の真の趣旨および範囲から逸脱することなく、種々の改変が可能なはずである。
【図面の簡単な説明】
本発明の追加目的および特徴は、次の詳細な記述および次に示す図面と関連した添付特許請求の範囲によって容易に明らかになるはずである。
【図１】  本発明の検討に関係する一般的なビデオゲームシステムの構成図である。
【図２】  ビデオメモリアレイのメモリマップを示す図である。
【図３】  本発明の実施形態が実装された汎用コンピュウタシステムの構成図である。
【図４】  本発明の実施形態に関する概念的制御流れ図である。
【図５】  エミュレートされたグラフィックスプロセッサの追跡に用いられるグラフィックスプロセッサ状態／モードアレイを示す図である。
【図６】  グラフィックスコマンドを記憶するために用いられる大局的状態アレイおよび２つのコマンドキャッシュを示す図である。
【図７Ａ】  グラフィックスコマンドプリプロセッサの動作のフローチャートを示す流れ図である。
【図７Ｂ】  グラフィックスコマンドプリプロセッサの動作のフローチャートを示す流れ図である。
【図８Ａ】  グラフィックスプロセッサエミュレーションモジュールの部分を構成するセーフフラッシュ、フレームフラッシュ、及び、キックアウトフラッシュ手順を示す流れ図である。
【図８Ｂ】  グラフィックスプロセッサエミュレーションモジュールの部分を構成するセーフフラッシュ、フレームフラッシュ、及び、キックアウトフラッシュ手順を示す流れ図である。
【図８Ｃ】  グラフィックスプロセッサエミュレーションモジュールの部分を構成するセーフフラッシュ、フレームフラッシュ、及び、キックアウトフラッシュ手順を示す流れ図である。
【図８Ｄ】  スワップコマンドキャッシュ手順を示す流れ図である。
【図９】  コマンドキャッシュの１つに記憶されているコマンドを十分に実行する（即ち、エミュレートする）手順を示す流れ図である。
【図１０Ａ】  コマンドキャッシュの１つに記憶されているコマンドを部分的に実行する（即ち、エミュレートする）手順を示す流れ図である。
【図１０Ｂ】  コマンドキャッシュの１つに記憶されているコマンドを部分的に実行する（即ち、エミュレートする）手順を示す流れ図である。
【図１１Ａ】  ビデオフレームの端部を処理する手順を示す流れ図である。
【図１１Ｂ】  ビデオフレームの端部を処理する手順を示す流れ図である。
【符号の説明】
１００  コンピュータ
１０２  エミュレーションモジュール
１０４  中央処理装置
１０６  メインメモリ
１０８  ビデオメモリサブシステム
１１０  通信バス
１１６  ビデオモニタ
１４０  メインプロセッサエミュレータ
１５０  グラフィックスシステムエミュレータ
【図１】
0003885498.tif 000002
【図２】
0003885498.tif 000003
【図３】
0003885498.tif 000004
【図４】
0003885498.tif 000005
【図５】
0003885498.tif 000006
【図６】
0003885498.tif 000007
【図７Ａ】
0003885498.tif 000008
【図７Ｂ】
0003885498.tif 000009
【図８Ａ】
0003885498.tif 000010
【図８Ｂ】
0003885498.tif 000011
【図８Ｃ】
0003885498.tif 000012
【図８Ｄ】
0003885498.tif 000013
【図９】
0003885498.tif 000014
【図１０Ａ】
0003885498.tif 000015
【図１０Ｂ】
0003885498.tif 000016
【図１１Ａ】
0003885498.tif 000017
【図１１Ｂ】
0003885498.tif 000018