レガシーゲーム用の事前(AoT)コンパイラを提供するためのシステム及び方法が説明されている。本開示の様々な実施形態は、これらの具体的な詳細の一部または全部を伴わずに実施されることに留意されたい。他の事例では、本開示の様々な実施形態を不必要に不明瞭にしないために、周知のプロセス操作は詳細に説明されていない。
図1は、更新されたコードの基本ブロック1~nまでを生成するためのシステム100の実施形態を示すブロック図であり、ここで、nは正の整数である。システム100は、キャッシュ102と、基本ブロックコンパイラ104と、ゲームタイトルGNを有するレガシーゲームNのエミュレートされた処理ユニット(PU)コード106と、を含み、ここで、Nは正の整数である。一例として、本明細書で使用されるキャッシュは、データを格納するハードウェアまたはソフトウェアの構成要素であり、そのため、データに対する将来の要求がより高速に処理され得る。キャッシュヒットは、要求されたデータがキャッシュ内で見つけられ得るときに発生し、一方でキャッシュミスは、見つけられ得ないときに発生する。キャッシュヒットは、キャッシュからデータを読み取ることによって処理され、これは、結果を再計算することや、またはメモリデバイスなどのより低速のデータストアから読み取ることよりも高速であり、そのため、キャッシュから処理できるリクエストが多いほど、システムがより高速に実行する。説明すると、キャッシュはレジスタのグループであり、これは、メインメモリデバイスと比較して、10倍~100倍など、より高速にアクセスされ得る。
一例として、キャッシュは、メインメモリデバイスよりも少ないメモリアドレスの数を有している。この例では、プロセッサは、操作で使用されるデータがキャッシュ内のメモリアドレスに格納されているかどうかを最初に判定し、そうでない場合は、プロセッサがメインメモリデバイスのメモリアドレスにアクセスしてデータを探す。
一例として、本明細書で使用される基本ブロックコンパイラは、エミュレートされたPUコード106コードを、更新されたコードの例であるゲームコードGCNに変換するコンピュータプログラムである。ゲームコードGCNは、レガシーゲームNの機能を表す。コンピュータプログラムは、エミュレーションプロセッサシステムの1つ以上のプロセッサによって実行される。ゲームコードGCNは、本明細書では中間コードと称される。一例として、中間コードは、ソースコードでもマシンコードでもない。説明すると、中間コードには、中央処理装置(CPU)のアーキテクチャ、またはグラフィック処理装置(GPU)のアーキテクチャ、または更新されたマシンのオーディオ処理装置(APU)のアーキテクチャに固有ではない基本ブロックが含まれており、その例が以下に提供されている。例示では、中間コードは、更新されたマシンのCPUまたはGPUで実行され得る基本ブロックを含み、その例には、ゲームコンソール、デスクトップコンピュータ、ラップトップコンピュータ、タブレット、スマートフォン、スマートテレビが含まれる。一例として、ソースコードは、プレーンテキストであり得る、人間が可読なプログラミング言語を使用して記述されている。一例として、本明細書で使用される基本ブロックコンパイラは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせを使用して実装される。説明すると、基本ブロックコンパイラの機能は、コントローラもしくはプログラマブルロジックデバイス(PLD)または特定用途向け集積回路(ASIC)を使用して実装される。
本明細書で使用されるコントローラの例には、プロセッサ及びメモリデバイスが含まれる。プロセッサはメモリデバイスに結合されている。本明細書で使用される場合、一例として、プロセッサは、マイクロプロセッサ、またはCPU、またはGPU、またはマイクロコントローラ、またはASIC、またはPLDである。本明細書で使用されるメモリデバイスの例には、ランダムアクセスメモリ(RAM)及び読み取り専用メモリ(ROM)が含まれる。説明すると、メモリデバイスは、フラッシュメモリデバイス、またはハードディスク、またはソリッドステートストレージデバイス、または独立ディスクの冗長アレイ(RAID)、またはそれらの組み合わせである。
エミュレートされたPUコード106の例は、マシンコードであり、これは操作を実行するようにレガシーマシンのCPUまたはGPUまたはAPUなどのプロセッサに指示する。例えば、エミュレートされたPUコード106は、キャッシュ102内に格納されたデータに対してロード、ストア、ジャンプ、または算術論理操作ユニット(ALU)操作などの特定の操作を実行するようにレガシーマシンのCPUに指示する命令のシーケンスを含む。別の例として、エミュレートされたPUコード106は、一連の1と0を含むバイナリコードである。別の例として、エミュレートされたPUコード106は、一連の命令を含み、これは、レガシーマシンのGPUが、キャッシュ102内に格納されたデータに対してロード、ストア、ジャンプ、またはALU操作などの特定の操作を実行するように指示する。レガシーマシンのGPUは、仮想オブジェクトに対して操作を実行し、色、強度、陰影、テクスチャ、またはそれらの組み合わせなどのパラメータを仮想オブジェクトに割り当てる。仮想オブジェクトの例には、仮想車両、仮想動物、仮想ゲームキャラクタ、仮想静止オブジェクト、仮想建物などが含まれる。色、強度、陰影、テクスチャ、またはそれらの組み合わせは、レガシーグラフィックパラメータの例であることに留意されたい。
さらに別の例として、エミュレートされたPUコード106は、一連の命令を含み、これは、レガシーマシンのAPUに、残響量(レガシーゲームNの仮想シーンの表示に同期する出力である)であるリバーブなどの1つ以上のレガシーオーディオパラメータを生成するように指示する。1つ以上のレガシーオーディオパラメータの別の例には、どのサウンドがレガシーゲームNの仮想シーンと同期する出力であり得るかに基づいたサンプリングレートが含まれる。1つ以上のレガシーオーディオパラメータのさらに別の例には、サウンドが、レガシーゲームNの仮想オブジェクトと同期して、ステレオのみとして出力されることが含まれる。
エミュレートされたPUコード106は、レガシーマシンのCPUまたはGPUのアーキテクチャに特定または独自のものである。例えば、エミュレートされたPUコード106は、更新されたマシンのCPUまたはGPUによって実行されることができない。別の例として、エミュレートされたPUコード106は、レガシーマシンでは実行可能であるが、更新されたマシンでは実行できない。
一例として、エミュレートされたPUコード106は、レガシーゲームNで操作を実行するためにレガシーマシンのプロセッサによって実行される。説明すると、エミュレートされたPUコード106は、レガシーマシン上でレガシーゲームをプレイするために実行される。レガシーゲームの例には、戦闘機ゲーム、ダンスレッスンゲーム、アドベンチャゲーム、アクションゲームなどのビデオゲームが含まれる。説明すると、レガシーゲームはゲーム開発者によって更新されていない。さらに説明するために、レガシーゲームの現在のバージョンはない。別のさらなる説明として、レガシーゲームは、現在のゲームの作成の何年も前に作成されたものである。
基本ブロックコンパイラ104は、レガシーゲームNのエミュレートされたPUコード106にアクセスし、エミュレートされたPUコード106を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。一例として、各基本ブロック1~nは、ある基本ブロックを別の基本ブロックと区別するための開始識別子と終了識別子を有する。基本ブロックコンパイラ104は、基本ブロック1~nをキャッシュ102に格納する。基本ブロック1~nが実行されると、レガシーゲームNがエミュレートされる。
図2は、ゲームコードGCNの基本ブロックをコンパイル及びディスパッチするための方法200の実施形態を示すフローチャートである。方法200は、更新されたマシンの1つ以上のプロセッサによって実行される。方法200は、キャッシュヒットがあるかどうか、例えば、基本ブロックがキャッシュ102に格納されているかどうかを判定する操作202を含む。例えば、操作202は、レガシーゲームのプレイ中のユーザ入力が受信されたときに実行またはトリガーされる。説明すると、ユーザ入力は、レガシーゲームNの仮想オブジェクトの位置もしくは方向、またはそれらの組み合わせを変更するために受信されている。図示では、ユーザ入力が受信されたと判定されると、基本ブロック1~nのうちの1つのような基本ブロックが、キャッシュ102に格納されているかどうかが判定されている(図1)。図示では、仮想オブジェクトの位置もしくは方向、またはそれらの組み合わせを変更するために基本ブロックが実行されている。
別の説明として、操作202は、レガシーゲームの仮想オブジェクトのルックアンドフィールなどのパラメータを変更するためのユーザ入力が受信されたときに実行される。図示では、ユーザ入力が受信されたと判定すると、基本ブロック1~nのうちの1つなどの基本ブロックがキャッシュ102に格納されているかどうかが判定される。図示では、仮想オブジェクトのパラメータを生成または変更するために基本ブロックが実行されている。ルックアンドフィールは、レガシーグラフィカルパラメータの一例であることに留意されたい。
さらに別の説明として、操作202は、どのサウンドが出力されるかに基づいて、レガシーオーディオパラメータを変更するためにユーザが入力したときに実行される。図示では、ユーザ入力が受信されると、基本ブロック1~nのうちの1つなどの基本ブロックがキャッシュ102に格納されているかどうかが判定される。図示では、基本ブロックは、レガシーゲームNの仮想シーンの表示を伴うサウンドとして出力されるレガシーオーディオパラメータを生成または変更するために実行されるものである。
基本ブロックがキャッシュされていると判定することに応じて、方法200の操作204では、基本ブロックがディスパッチされる。例えば、基本ブロックは、操作204で実行されるか、または動作する。説明すると、基本ブロックは、更新されたマシンのCPUによって実行され、仮想オブジェクトをある位置から別の位置に、もしくはある方向から別の方向に、またはそれらの組み合わせで動かす。別の説明として、基本ブロックは、パラメータを生成してパラメータを仮想オブジェクトの一部に割り当てるために更新されたマシンのGPUによって実行される。仮想オブジェクトの一部分の一例には、仮想オブジェクトのピクセル、または仮想オブジェクトの三角形の部分、または仮想オブジェクトの事前規定された形状の一部分が含まれる。説明すると、仮想オブジェクトは、事前に決定された数のピクセルに分割され、各ピクセルにはパラメータの値が割り当てられる。別の例として、基本ブロックは、更新されたマシンのAPUによって実行され、レガシーオーディオパラメータを生成し、レガシーオーディオパラメータをレガシーゲームNの仮想シーンを伴うサウンドとして出力する。
基本ブロックがキャッシュされていないとの判定に応じて、基本ブロックをコンパイルする操作206が方法200で実行される。操作206は、基本ブロックコンパイラ104(図1)によって実行される。例えば、基本ブロックコンパイラ104は、レガシーゲームNのエミュレートされたPUコード106(図1)を解析して、操作202の前に、レガシーゲームのプレイ中に受信したユーザ入力を処理するための機能を含むエミュレートされたPUコード命令を識別する。操作202の前に受信されたユーザ入力は、操作202をトリガーする。説明すると、基本ブロックコンパイラ104は、エミュレートされたPUコード106の各エミュレートされたコードPU命令をトラバースして、エミュレートされたコードPUコード命令が、レガシーゲームのプレイ中に受信したユーザ入力を満たす(例えば、応答を生成する)操作(機能など)を含むかどうかを判定する。図示では、機能が識別されると、基本ブロックコンパイラ104は、エミュレートされたコードのPUコード命令を変換して、基本ブロックを生成する。図示では、受信したユーザ入力に応答して、操作202の前に、ユーザ入力を処理するために必要とされないレガシーゲームの他のエミュレートされたコードPUコード命令は、基本ブロックコンパイラ104によって基本ブロックにコンパイルされない。
方法200の操作208において、操作206で生成された基本ブロックは、基本ブロックコンパイラ104によってキャッシュ102に格納される。次に、キャッシュされた基本ブロックは、操作204で実行され、操作202の前に受信したユーザ入力を処理する。
一実施形態では、方法200は、サーバシステムの1つ以上のプロセッサによって実行される。一例として、サーバシステムは、更新されたマシンをサーバとして含む。説明すると、各サーバブレードは、ゲームコンソールなどの更新されたマシンである。
一実施形態では、方法200は、ユーザ入力が受信されるまで実行されない。例えば、基本ブロック1~nのうちの1つなどの基本ブロックが、キャッシュ102に格納されているかどうかの判定はされず、基本ブロックのコンパイルも、ユーザ入力が受信されるまで基本ブロックの実行もされない。
一実施形態では、基本ブロックコンパイラ104は、レガシーゲームNのプレイ中の第1のユーザ入力に応答して、基本ブロック1~nのうちの1つ以上をコンパイルし、レガシーゲームNのプレイ中の第2のユーザ入力に応答して、基本ブロック1~nのうちの残りの1つ以上をコンパイルする。説明すると、基本ブロックコンパイラ104は、第1のユーザ入力を処理するために基本ブロック1及び2を生成し、第2のユーザ入力を処理するために基本ブロック3~7を生成する。第2のユーザ入力は、第1のユーザ入力の後に受信される。
図3は、基本ブロック1~nなどの基本ブロックをコンパイル及びディスパッチするためのシステム304の実施形態を説明するためのブロック図である。システム300は、基本ブロックコンパイラ104、キャッシュ102、及びブロックディスパッチャ302を含む。一例として、ブロックディスパッチャ302は、ハードウェアもしくはソフトウェア、またはそれらの組み合わせであり、ユーザ入力を処理するために基本ブロック1~nのうちの1つ以上の操作を実行する。説明すると、ブロックディスパッチャ302は、PLDまたはASICまたはコントローラである。別の説明として、ブロックディスパッチャ302は、コンピュータソフトウェアである。一例として、ブロックディスパッチャ302は、更新されたマシンのGPUまたはCPUである。
基本ブロックコンパイラ104は、操作コード(オペコード)などのエミュレートされたPUコード106(図1)の一部分を復号化し、その部分を、更新されたマシンのCPUまたはGPUまたはAPUなどの、プロセッシングユニットのための中間表現に変換する。例えば、基本ブロックコンパイラ104は、1つ以上の命令など、エミュレートされたPUコード106のCPUコードの部分を解析して、CPUコードの一部分がユーザ入力を処理するための機能を含むかどうかを判定する。そのように判定すると、基本ブロックコンパイラ104は、CPUコードの一部分を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。別の例として、基本ブロックコンパイラ104は、1つ以上の命令などのエミュレートされたPUコード106のGPUコードの一部分を解析して、GPUコードの一部分が、ユーザ入力を処理する機能を含むかどうかを判定する。そのように判定すると、基本ブロックコンパイラ104は、GPUコードの一部分を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。さらに別の例として、基本ブロックコンパイラ104は、1つ以上の命令などのエミュレートされたPUコード106のAPUコードの一部分を解析して、APUコードの一部分が、ユーザ入力を処理する機能を含むかどうかを判定する。そのように判定すると、基本ブロックコンパイラ104は、APUコードの一部分を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。
また、基本ブロックコンパイラ104は、エミュレートされたPUコード106の一部分から生成された各基本ブロックの実行のサイクル数を推定して、推定カウントを生成する。例えば、基本ブロックコンパイラ104は、基本ブロック1がジャンプ動作を含み、ジャンプ動作が所定の時間を要すると判定する。基本ブロックコンパイラ104は、基本ブロック1のジャンプ動作が所定の時間を要すると推定する。ブロックコンパイラ104は、推定されたカウントをキャッシュ102に格納する。例えば、ブロックコンパイラ104は、サイクル数が推定される推定されたカウントを基本ブロックnに格納する。
基本ブロックがコンパイルされると、それらは高速ルックアップのためにキャッシュ102に格納される。例えば、どの基本ブロックがコンパイルされているかに応答してユーザ入力を受信した後に別のユーザ入力を受信し、同じ基本ブロックが、他のユーザ入力の処理に使用できるとき、基本ブロックは、キャッシュ102から迅速にアクセスすることができ、再生成される必要がない。
さらに、キャッシュ102に格納された1つ以上の基本ブロックは、コンパイル後に無効としてマークされることができる。無効としてマークされた1つ以上の基本ブロックは、その後、基本ブロックの実行中に有効化されるか、または無効化される。1つ以上の基本ブロックが無効化されるとき、1つ以上の追加の基本ブロックがコンパイルされる。1つ以上の追加の基本ブロックのコンパイルは、本明細書では、1つ以上の基本ブロックの再コンパイルと呼ばれることがある。
1つ以上の追加の基本ブロックの各々は、1つ以上の基本ブロック1~nの構造と同じ構造を有する。例えば、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、及び操作がある。別の例として、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、操作、及び追加の基本ブロックの操作の実行のサイクル数を有する。この例では、1つ以上の追加の基本ブロックのいくつかは、無効なマークを含む。さらに別の例として、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、操作、及び追加の基本ブロックの操作の実行のサイクル数を有する。コードの追加ブロックの各々は、基本ブロック1~nの各々と同じ方法で実行されることに留意されたい。
ブロックディスパッチャ302は、ユーザ入力に基づいて、基本ブロック1~nのうちの1つ以上を実行または動作する。例えば、ブロックディスパッチャ302は、基本ブロック1及び2を実行して第1のユーザ入力を処理し、第2のユーザ入力に応答して基本ブロック3~7を実行する。一例として、ブロックディスパッチャ302は、デジタルクロック発振器またはクロックジェネレータなどのクロックソースを含み、これは、実際のカウントを生成するためのユーザ入力に基づいて、1つ以上の基本ブロック1~nを実行するために使用されるサイクル数をカウントする。ブロックディスパッチャ302は、実際のカウントをブロックコンパイラ104に送信して、推定されたカウントを実際のカウントで更新する。例えば、実際のカウントは、実際のカウントが計算される基本ブロックnに格納される。説明すると、実際のカウントは、基本ブロックnに割り当てられたキャッシュ102の1つ以上のメモリレジスタに格納される。
一実施形態では、基本ブロックコンパイラ104は、任意の基本ブロックの実行のためのサイクル数を推定しない。この実施形態では、推定されたカウントの実際のカウントへの置き換えはない。むしろ、この実施形態では、実際のカウントは、ブロックコンパイラ104によって、実際にカウントが判定される基本ブロックnに格納される。
図4Aは、ゲームコンソール402内での基本ブロック1~nのコンパイルを説明するためのシステム400の実施形態の図である。システム400は、ゲームコンソール402、サーバシステム404、コンピュータネットワーク408、及びディスプレイデバイス410を含む。サーバシステム404は、1つ以上のサーバを含む。一例として、サーバシステム404は、データセンタのハウジング内に配置されている。サーバシステム404は、エミュレートされたPUコード104などのエミュレートされたPUコードを格納するメモリデバイス412を含む。例えば、メモリデバイス412は、ゲームコード1(gc1)、ゲームコード2(gc2)及びその後のゲームコードN(gcN)までを格納する。ゲームコードgcNは、エミュレートされたPUコード106の例である(図1)。ゲームコード1~Nの各々は、レガシーゲームのレガシーコードである。説明すると、ゲームコードgc1は、第1のレガシーゲームをプレイするためのマシンコードであり、ゲームコードgc2は、第2のレガシーゲームをプレイするためのマシンコードである。第2のレガシーゲームは、第1のレガシーゲームとは異なっている。一例として、メモリデバイス412は、レガシーマシンのメモリデバイスであることに留意されたい。
一例として、ゲームコードgc1~gcNのうちどれも、更新されたマシンで実行されることができず、かつ、レガシーマシンで実行されることができない。説明すると、更新されたマシンのCPUまたはオペレーティングシステムは、ゲームコードgc1~gcNの実行をサポートできない。その一方で、レガシーマシンのCPUまたはオペレーティングシステムは、ゲームコードgc1~gcNの実行をサポートする。本明細書で使用されるコンピュータネットワークの例には、インターネットなどのワイドエリアネットワーク(WAN)、またはイントラネットなどのローカルエリアネットワーク(LAN)、またはそれらの組み合わせが含まれる。
ゲームコンソール402は、更新されたマシンの一例である。ディスプレイデバイス410の例には、テレビ、スマートテレビ、及びコンピュータモニタが含まれる。説明すると、ディスプレイデバイス410は、液晶ディスプレイ(LCD)デバイス、または発光ダイオード(LED)ディスプレイデバイス、または有機発光ダイオード(OLED)ディスプレイデバイスである。
システム400は、ユーザ1の片手または両手で保持されるハンドヘルドコントローラ(HHC)414をさらに含む。本明細書で使用されるハンドヘルドコントローラの例には、ボタンを備えたコントローラ、Sony(登録商標)CorporationのMove(登録商標)コントローラ、及銃型コントローラが含まれる。ハンドヘルドコントローラのボタンの例には、ジョイスティック、ディスプレイデバイス410上で仮想オブジェクトを上、下、左、または右に移動するためのボタン、及びゲームタイトルGNを有するレガシーゲームNの様々な機能を選択するための他のボタンが含まれる。
ゲームコンソール402は、メモリデバイス406、入力プロセッサシステム407、及びエミュレーションプロセッサシステム409を含む。一例として、本明細書で使用されるプロセッサシステムは、互いに結合された1つ以上のプロセッサを含む。エミュレーションプロセッサシステム409は、メモリデバイス406に結合され、入力プロセッサシステム407は、エミュレーションプロセッサシステム409に結合される。エミュレーションプロセッサシステム409は、基本ブロックコンパイラ104及びキャッシュ102を含む。基本ブロックコンパイラ104は、キャッシュ102に結合されている。
ゲームコンソール402は、高精細メディアインターフェース(HDMI(登録商標))ケーブルなどの有線通信媒体または無線接続を介してディスプレイデバイス410に結合される。本明細書で使用される無線接続の例は、Wi-Fi(登録商標)接続またはBluetooth(登録商標)接続を含む。また、ハンドヘルドコントローラ414は、有線接続または無線接続を介してゲームコンソール402に結合されている。本明細書で使用される有線接続の例は、シリアル転送ケーブル、パラレル転送ケーブル、及びユニバーサルシリアルバス(USB)ケーブルを含む。
クライアントデバイスの一例は、ハンドヘルドコントローラ、ゲームコンソール、及びディスプレイデバイスの組み合わせを含む。クライアントデバイスの別の例は、ハンドヘルドコントローラとディスプレイデバイスの組み合わせを含む。クライアントデバイスのさらに別の例は、スマートテレビまたはヘッドマウントディスプレイなどのディスプレイデバイスを含む。クライアントデバイスの別の例は、コンピュータまたはスマートフォンを含む。
ユーザ1は、ユーザ識別(ID)及びパスワードがサーバシステム404によって認証されると、自身のユーザアカウント1にログインする。ユーザアカウント1には、サーバシステム1によってユーザID1が割り当てられる。ユーザ1がユーザアカウント1にログインすると、ユーザ1は、ゲームタイトルG1、ゲームタイトルGa、ゲームタイトルG2、そしてそのように続いてゲームタイトルGNまで、などの複数のゲームタイトルにアクセスすることができる。ゲームタイトルG1、G2、そしてそのように続くゲームタイトルGNまでは、レガシーゲームのタイトルの例である。ゲームタイトルGaは、レガシーゲームではないゲームのタイトルである。むしろ、ゲームタイトルGaは、レガシーマシンではプレイできないFortnite(登録商標)など、現在のゲームのものである。
ユーザアカウント1にログインした後、ユーザ1は、レガシーゲームNをプレイするためのゲームタイトルGNを選択するために、ハンドヘルドコントローラ414上の1つ以上のボタンを選択する。ユーザ1がゲームタイトルGNを選択すると選択を示すユーザ入力418が、ハンドヘルドコントローラ414から、ゲームコンソール402及びコンピュータネットワーク408を介してサーバシステム404に送信される。一例として、ユーザ入力は入力信号である。ゲームタイトルGNの選択を示すユーザ入力418を受信すると、サーバシステム404は、ユーザ入力418に基づいてゲームコードgcNを識別する。例えば、サーバシステム404は、ゲームコードgcNがゲームタイトルGNと同じゲームタイトルを有し、その選択がユーザ入力418に示されていることを識別する。
サーバシステム404は、コンピュータネットワーク408を介してゲームコードgcNをゲームコンソール402に送信する。ゲームコードgcNを受信すると、エミュレーションプロセッサシステム409は、ゲームコードgcNをゲームコンソール402のメモリデバイス406に格納する。
ゲームコードgcNを有するレガシーゲームNのプレイ中に、ユーザ入力419が、無線接続を介してハンドヘルドコントローラ414から受信されると、入力プロセッサシステム407は、ユーザ入力419をユーザ入力420に変換し、ユーザ入力420をエミュレーションプロセッサシステム409に提供する。一例として、ユーザ入力419は、レガシーゲームNのプレイ中に戦闘機を位置P1から位置P2に、またはある方向から別の方向に移動する要求を含む。戦闘機は仮想オブジェクトの一例である。ユーザ入力420を受信すると、エミュレーションプロセッサシステム409は、基本ブロックコンパイラ104を実行して、メモリデバイス406に格納されたゲームコードgcNの一部分からゲームコードGCNの一部分を生成する。ゲームコードGCNの一部分は、ユーザ入力420に基づいて生成される。例えば、ユーザ入力420が、レガシーゲームNのプレイ中に位置P1から位置P2に戦闘機を移動する要求を含むとき、基本ブロックコンパイラ104は、ゲームコードgcNを解析して、位置P1から位置P2までを計算する命令を特定する。基本ブロックコンパイラ104は、命令をゲームコードGCNの基本ブロックに変換し、基本ブロックが、次いで実行され、戦闘機の位置をP1からP2に変更する。さらに、本例では、位置がP1からP2に変化するとき、戦闘機が位置P1にある仮想環境が、戦闘機が位置P2にある仮想環境に変更される。本例では、ゲームコードGCNの基本ブロックは、エミュレーションプロセッサシステム409のGPUによって実行されて、画像フレーム422を生成する。説明すると、画像フレーム422は、位置P2にある戦闘機を有する仮想環境を表示するために、ディスプレイデバイス410上に表示される。このようにして、ゲームコードGCNの大部分または全体は、基本ブロックコンパイラ104によってコンパイルされ、実行のためにキャッシュ102に格納される。一例として、仮想シーンなどの仮想環境は、1つ以上の仮想現実(VR)画像または1つ以上の拡張現実(AR)画像を含む。
一実施形態では、サーバシステム404とゲームコンソール402との間のデータの通信は、インターネットプロトコル(TCP/IP)を介した伝送制御プロトコルなどのネットワーク通信プロトコルを介して行われる。例えば、サーバシステム404は、データをパケットに変換するためのネットワークインターフェースコントローラ(NIC)を含む。サーバシステム404のネットワークインターフェースコントローラは、メモリデバイス412に結合されて、メモリデバイス412からデータを受信する。メモリデバイス412からデータを受信すると、サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルをデータに適用することによって、1つ以上のパケット内にデータを埋め込む。1つ以上のパケットは、サーバシステム404のネットワークインターフェースコントローラから、コンピュータネットワーク408を介してゲームコンソール402に転送される。ゲームコンソール402のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを適用することによって、1つ以上のパケットからデータを抽出する。ゲームコンソール402のネットワークインターフェースコントローラは、エミュレーションプロセッサシステム409に結合されている。ゲームコンソール402のネットワークインターフェースコントローラは、コンピュータネットワーク408から受信したデータをエミュレーションプロセッサシステム409に提供する。さらに、ゲームコンソール402のネットワークインターフェースコントローラは、エミュレーションプロセッサシステム409からデータを受信し、ネットワーク通信プロトコルを適用することによって1つ以上のパケット内にデータを埋め込み、コンピュータネットワーク408を介して1つ以上のパケットをサーバシステム404に送信する。サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを、コンピュータネットワーク408から受信した1つ以上のパケットに適用して、1つ以上のパケットからデータを抽出し、格納のためにデータをメモリデバイス412に送信する。ネットワークインターフェースコントローラの例は、ネットワークインターフェースカード、イーサネット(登録商標)カード、及びネットワークアダプタを含む。説明すると、ゲームコンソール402のネットワークインターフェースコントローラは、入力プロセッサシステム407がコンピュータネットワーク408と通信することを可能にする。
一実施形態では、コンピュータネットワーク408に加えて、またはその代わりに、サーバシステム404とゲームコンソール402との間でデータを通信するためにセルラーネットワークが使用される。例えば、サーバシステム404とゲームコンソール402との間の通信は、無線技術を使用して促進される。無線技術は、例えば、4Gまたは5G無線通信技術を含む。本明細書で使用されるように、5Gはセルラーネットワーク技術の第5世代である。また、5Gネットワークは、デジタルセルラーネットワークであり、そこでは、プロバイダによって網羅されるサービスエリアが、セルと呼ばれる小さな地理的エリアに分割されている。5G無線通信技術では、サウンドと画像を表すアナログ信号が電話でデジタル化され、アナログ-デジタルコンバータによって変換され、ビットのストリームとして送信される。セル内のすべての5G無線デバイスは、他のセルで再利用される周波数のプールからトランシーバによって割り当てられた周波数チャネルを介して、セル内のローカルアンテナアレイ及び低電力自動トランシーバ(送信機及び受信機)の電波によって通信する。ローカルアンテナは、高帯域幅の光ファイバまたは無線バックホール接続によってセルラーネットワークで接続される。他のセルネットワークと同様に、1つのセルから別のセルに移動するモバイルデバイスは、新しいセルに自動的に転送される。5Gネットワークは、通信ネットワークの単なる一例示的タイプであり、本開示の実施形態は、5Gに続く後続世代の有線技術または無線技術と同様に、3Gまたは4Gなどの前世代の無線通信または有線通信を利用することができることを理解されたい。
一実施形態では、ゲームコンソール402及びサーバシステム404のいずれかは、本明細書ではコンピューティングデバイスと称される。コンピューティングデバイスの他の例には、タブレット、スマートフォン、ラップトップコンピュータ、デスクトップコンピュータ、及びスマートテレビが含まれる。
一実施形態では、ゲームコードgc1~gcNの各々は、サーバシステム404またはレガシーマシンの別個のメモリデバイスに格納されている。例えば、ゲームコードgc1は、第1のレガシーマシンのメモリデバイスに格納され、ゲームコードgc2は、第2のレガシーマシンのメモリデバイスに格納される。別の例として、ゲームコードgc1は、サーバシステム404の第1のメモリデバイスに格納され、ゲームコードgc2は、サーバシステム404の第2のメモリデバイスに格納される。
一実施形態では、メモリデバイス412またはメモリデバイス406はキャッシュではない。むしろ、メモリデバイス412またはメモリデバイス406の各々は、RAMなどのメインメモリである。
一実施形態では、メモリデバイス412は、メモリコントローラに結合されている。メモリコントローラは、メモリデバイス412からデータを読み取り、メモリデバイス412にデータを書き込む。メモリコントローラは、サーバシステム404のネットワークインターフェースコントローラに結合されている。メモリコントローラは、サーバシステム404のネットワークインターフェースコントローラから受信したデータを、格納のためにメモリデバイス412に送信する。メモリコントローラはまた、メモリデバイス412から受信したデータを、コンピュータネットワーク408を介してゲームコンソール402に送信するために、サーバシステム404のネットワークインターフェースコントローラにも送信する。
図4Bは、システム450の実施形態の図であり、エミュレーションプロセッサシステム409及び入力プロセッサシステム407が、サーバシステム404内に配置され、画像フレーム422が、コンピュータネットワーク408を介してサーバシステム404から仮想環境または仮想シーンを表示するためのディスプレイデバイス410へ送信されることを示している。システム450は、サーバシステム404、ディスプレイデバイス410、及びハンドヘルドコントローラ414を含む。
サーバシステム404は、メモリデバイス412、入力プロセッサシステム407、及びエミュレーションプロセッサシステム409を含む。メモリデバイス412は、エミュレーションプロセッサシステム409に結合され、入力プロセッサシステム407は、エミュレーションプロセッサシステム409に結合されている。ディスプレイデバイス410は、ディスプレイデバイス410のネットワークインターフェースコントローラを介してコンピュータネットワーク408に結合されている。ディスプレイデバイス410は、ディスプレイデバイス410のネットワークインターフェースコントローラに結合されたプロセッサを含む。ディスプレイデバイス410のプロセッサは、ゲームタイトルGN及びゲームコードgcNを有するレガシーゲームNのプレイ中にユーザ入力419を受信し、ディスプレイデバイス410のネットワークインターフェースコントローラにユーザ入力419を送信する。ディスプレイデバイス410のネットワークインターフェースコントローラは、コンピュータネットワーク408を介して、サーバシステム404の入力プロセッサシステム407にユーザ入力419を送信する。
ユーザ入力419を受信すると、入力プロセッサシステム407は、ユーザ入力419をユーザ入力420に変換し、ユーザ入力420をエミュレーションプロセッサシステム409に提供する。ユーザ入力420を受信すると、エミュレーションプロセッサシステム409は、画像フレーム422の生成のために基本ブロック1~nをコンパイルするために、ゲームコードgcNに関して図4Aを参照して上述した同じ機能を実行する。サーバシステム404は、ディスプレイデバイス410のディスプレイ画面上に仮想環境452などの仮想環境を表示するために、コンピュータネットワーク408を介して、ディスプレイデバイス410に画像フレーム422を送信する。例えば、仮想環境452は、戦闘機の一例である仮想オブジェクト454を含む。この例では、仮想環境452は、仮想ピラミッド455及び仮想構造456などの1つ以上の仮想オブジェクトを含む仮想背景を含む。この例では、仮想オブジェクト454は、ゲームコードgcNを有するレガシーゲームNのプレイ中に、仮想ピラミッド455及び仮想構造456に向けて仮想ミサイルを発射することができる。
一実施形態では、サーバシステム404とディスプレイデバイス410との間のデータの通信は、ネットワーク通信プロトコルを介して行われる。例えば、サーバシステム404は、データをパケットに変換するネットワークインターフェースコントローラを含む。サーバシステム404のネットワークインターフェースコントローラは、エミュレーションプロセッサシステムからデータを受信するためにエミュレーションプロセッサシステム409に結合され、ネットワーク通信プロトコルを適用することによって1つ以上のパケット内にデータを埋め込む。パケットは、サーバシステム404のネットワークインターフェースコントローラから、コンピュータネットワーク408を介してディスプレイデバイス410に転送される。ディスプレイデバイス410のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを適用することによって、1つ以上のパケットからデータを抽出する。ディスプレイデバイスのネットワークインターフェースコントローラは、ディスプレイデバイス410のプロセッサに結合されている。ディスプレイデバイスのネットワークインターフェースコントローラは、コンピュータネットワーク408から受信したデータをディスプレイデバイス410のプロセッサに提供する。ディスプレイデバイス410のプロセッサは、画像フレーム422などのデータを、ディスプレイデバイス410のディスプレイ画面上にレンダリングする。さらに、ディスプレイデバイス410のネットワークインターフェースコントローラは、ディスプレイデバイス410のプロセッサからデータを受信し、ネットワーク通信プロトコルを適用することによって1つ以上のパケット内にデータを埋め込み、コンピュータネットワーク408を介して1つ以上のパケットをサーバシステム404に送信する。サーバシステム404のネットワークインターフェースコントローラは、コンピュータネットワーク408から受信した1つ以上のパケットへのネットワーク通信プロトコルに適用して、1つ以上のパケットからデータを抽出し、データをエミュレーションプロセッサシステム409に送信する。
一実施形態では、コンピュータネットワーク408に加えて、またはその代わりに、サーバシステム404とディスプレイデバイス410との間でデータを通信するためにセルラーネットワークが使用される。例えば、サーバシステム404とディスプレイデバイスとの間の通信は、無線技術を使用して促進される。
一実施形態では、ディスプレイデバイス410の代わりに、ヘッドマウントディスプレイ(HMD)が使用される。ヘッドマウントディスプレイは、ユーザ1の頭に装着され、LED画面、OLED画面、LCD画面などのディスプレイ画面を含む。HMDは、ディスプレイデバイス410によって実行されるものと同じ機能を実行する。
図5Aは、基本ブロックの一実施形態を説明するための図である。各基本ブロックは、ソースレジスタアドレス、宛先レジスタアドレス、及び操作を含む。例えば、基本ブロック1は、ソースレジスタアドレス1、宛先レジスタアドレス1、及び操作1を含む。基本ブロック2は、ソースレジスタアドレス2、宛先レジスタアドレス2、及び操作2を含み、基本ブロックnは、ソースレジスタアドレスn、宛先レジスタアドレスn、及び操作nを含む。一例として、ソースレジスタアドレスは、キャッシュ102内の1つ以上のソースレジスタのアドレスであり、宛先レジスタアドレスは、キャッシュ102内の1つ以上の宛先レジスタのアドレスである。基本ブロックの操作の例には、ジャンプ操作、分岐操作、読み取り操作、書き込み操作、比較操作、リターン操作が含まれる。基本ブロックの操作のさらなる例には、加算操作、減算操作、乗算操作、及び除算操作などの算術操作が含まれる。
一例として、操作nが読み出し操作のとき、データがソースレジスタアドレスnから読み出され、基本ブロックnを実行する。別の例として、操作nが書き込み操作である場合、データが宛先レジスタアドレスnに書き込まれ、基本ブロックnを実行する。別の例として、操作nが移動操作であるとき、データはソースレジスタアドレスnから読み取られ、操作nはデータに対して実行され、データは宛先レジスタアドレスnに書き込まれ、基本ブロックnを実行する。さらに別の例として、操作nが比較操作であるとき、基本ブロックnに記載された第1のソースレジスタアドレスに格納されたデータの第1の値が、基本ブロックnに記載された第2のソースレジスタアドレスに格納されたデータの第2の値と比較され、比較結果を生成し、この比較結果が宛先レジスタアドレスnに格納されて基本ブロックnを実行する。別の例として、操作nが加算操作であるとき、基本ブロックn内に記載された第1のソースアドレスに格納されたデータの第1の値が、基本ブロックn内に示された第2のソースアドレスに格納されたデータの第2の値に加算され、加算結果を生成し、この加算結果が宛先レジスタアドレスnに格納され、基本ブロックnを実行する。さらに別の例として、本明細書で説明する仮想オブジェクトが、位置P1から位置P2に移動するためのものであるとき、かつ、操作nが、仮想オブジェクトの位置がP1からP2に更新される書き込み操作であるとき、宛先レジスタアドレスnでの位置P1は、基本ブロックnを実行するために位置P2で上書きされる。この例では、基本ブロックnの実行は、仮想オブジェクトが位置P1から位置P2に移動することであることをエミュレーションプロセッサシステム409に示す。また、この例では、ユーザ入力420(図4A)は、エミュレーションプロセッサシステム409に仮想オブジェクトを位置P1からP2に移動するように指示する。同様に、別の例として、本明細書で説明する仮想オブジェクトが、方向O1から方向O2に移動するものであり、操作nが、仮想オブジェクトの方向がO1からO2に更新される書き込み操作であるとき、宛先レジスタアドレスnの方向O1は、方向O2で上書きされ、基本ブロックnを実行する。この例では、基本ブロックnの実行は、仮想オブジェクトが方向O1から方向O2に移動することであることをエミュレーションプロセッサシステム409に示す。さらに、この例では、ユーザ入力420は、エミュレーションプロセッサシステム409に仮想オブジェクトを方向O1からO2に移動するように指示する。
さらに別の例として、本明細書で説明する仮想オブジェクトの一部分が、色を赤から緑に変更するもので、操作nが、仮想オブジェクトの色が赤から緑に更新される書き込み操作であるとき、宛先レジスタアドレスnで赤色を表すデータは、緑色を表すデータで上書きされ、基本ブロックnを実行する。この例では、基本ブロックnの実行は、仮想オブジェクトの一部分の色が赤から緑に変更されるものであることをエミュレーションプロセッサシステム409に示す。また、この例では、ユーザ入力420は、仮想オブジェクトの部分の色を赤から緑に変更するようにエミュレーションプロセッサシステム409に指示する。同様の方法で、強度及びテクスチャなどの他のパラメータが、ユーザ入力420に基づいて変更されることができる。強度とテクスチャは、レガシーグラフィカルパラメータの例である。
各基本ブロックは、基本ブロック実行のサイクル数を含む。例えば、基本ブロック1は、基本ブロック1実行のサイクル数1を含む。別の例として、基本ブロック2は、基本ブロック2の実行のサイクル数2を含み、基本ブロックnは、基本ブロックnの実行のサイクル数nを含む。一例として、基本ブロック実行の推定サイクル数は、基本ブロックのコンパイル時に基本ブロックコンパイラ104(図1)によって推定される。この例では、推定サイクル数は、基本ブロックに格納されている。また、この例では、基本ブロックがブロックディスパッチャ302によって実行された後(図3)、ブロックディスパッチャ302は、上記の方法で推定実行サイクル数を実数で更新し、実数をブロックコンパイラ104に提供する。推定されたサイクル数は、ブロックコンパイラ104によって基本ブロックの実際のカウントに置き換えられる。別の例として、操作nの実行のサイクル数の実際のカウントは、ブロックディスパッチャ302によって生成され、基本ブロックnに格納される。この例では、操作nの実行のサイクル数の推定はない。
さらに、別の例として、基本ブロック1~nのうちの1つ以上は、基本ブロック1~nのうちの1つ以上が有効性についてチェックされることを示す無効なマークを含む。例えば、基本ブロックnは、無効なマークnを含む。
エミュレートされたPUコード106をゲームコードGCNの基本ブロック1~nに変換することにより、フックブロックなどのフックが、基本ブロック1~nの任意の2つの間に挿入され得ることに留意されたい。例えば、フックブロックnは、基本ブロック(n-1)とnの間に挿入されることができる。フックブロックnは、基本ブロックnの構造と同じ構造である。例えば、フックブロックには、ソースレジスタアドレス、宛先レジスタアドレス、操作、及びフックブロックの操作の実行サイクル数が含まれる。一例として、レガシーマシンに関連するセキュリティの問題のため、本明細書で説明されるフックは、レガシーマシンで実行するためにレガシーマシンに格納されたエミュレートされたPUコード106(図1)の命令の間に挿入されることができない。
さらに、基本ブロック1~nは、その中に固定されるなど、キャッシュ102にキー入力されることに留意されたい(図1)。例えば、基本ブロック1は、キャッシュ102内の基本ブロック1の開始場所を示す開始メモリアドレス1を有する。また、基本ブロック1は、キャッシュ102内の基本ブロック1の終了場所を示す終了メモリアドレス1を有する。別の例として、基本ブロック1の終了アドレス1は、開始メモリアドレス1からのキャッシュ106内のオフセットによって示される。さらに別の例として、基本ブロック2は、キャッシュ102内の基本ブロック2の開始場所を示す開始メモリアドレス2を有する。また、基本ブロック2は、キャッシュ102内の基本ブロック2の終了場所を示す終了メモリアドレス2を有する。別の例として、基本ブロック2の終了アドレス2は、開始メモリアドレス2からのキャッシュ106内のオフセットによって示される。同様に、別の例として、基本ブロックnは、キャッシュ102内の基本ブロックnの開始場所を示す開始メモリアドレスnを有する。また、基本ブロックnは、キャッシュ102内の基本ブロックnの終了場所を示す終了メモリアドレスnを有する。別の例として、基本ブロックnの終了アドレスnは、開始メモリアドレスnからのキャッシュ106内のオフセットによって示される。キャッシュ102に格納された基本ブロック1~nの開始及び終了メモリアドレスから、基本ブロックコンパイラ102などのエミュレーションプロセッサシステム409(図4A)は、キャッシュ102内の基本ブロック1~nの場所を特定することができる。
また、更新されたマシンのブロックディスパッチャ302が、基本ブロック1を実行した直後に基本ブロックnを実行することをユーザ入力が示す場合、ブロックディスパッチャ302は、キャッシュ102内の基本ブロック2~(n-1)の実行をスキップし、基本ブロック1から基本ブロックnにジャンプすることに留意されたい。この場合、基本ブロック1の実行は、ブロックディスパッチャ302が基本ブロックnにジャンプするときに、ブロックディスパッチャ302によって閉じられる。また、この場合、次の基本ブロックの開始アドレスは、前の基本ブロックの終了アドレスに連続している。例えば、開始アドレス2は終了アドレス1に連続し、開始アドレスnは基本ブロック(n-1)の終了アドレス(n-1)に連続している。
一実施形態では、ソースレジスタアドレス1~nは、キャッシュ102のレジスタのメモリアドレスであり、かつ、宛先レジスタアドレス1~nは、キャッシュ102内のレジスタのメモリアドレスである。
一実施形態では、基本ブロックは複数の操作を含む。例えば、基本ブロックnは、第1の操作、第1のソースレジスタアドレス、及び第1の宛先レジスタアドレスを含む。基本ブロックnは、第2の操作、第2のソースレジスタアドレス、及び第2の宛先レジスタアドレスをさらに含む。
一実施形態では、基本ブロックは、操作、複数のソースアドレス、及び宛先アドレスを含む。
一実施形態では、基本ブロックは、操作、複数の宛先アドレス、及びソースアドレスを含む。
一実施形態では、基本ブロックは、複数の操作、複数のソースアドレス、及び複数の宛先アドレスを含む。
一実施形態では、基本ブロックは、1つ以上の操作、1つ以上のソースアドレス、及び1つ以上の宛先アドレスを含む。
一実施形態では、基本ブロックは、ソースレジスタアドレスまたは宛先レジスタアドレスのいずれかを含むが、両方は含まない。
一実施形態では、ブロックコンパイラ102は、基本ブロックnの実行のためのサイクル数を推定しない。むしろ、ブロックディスパッチャ302は、基本ブロックnの実行のサイクル数の実際のカウントを生成し、実際のカウントを基本ブロックnに格納する。
図5Bは、基本ブロックコンパイラ104(図1)によって実行されるコンパイル操作の実施形態を説明するための図である。エミュレートされたPUコード命令Mの例は、命令550として示され、基本ブロックnの例は、基本ブロック552として示され、ここで、Mは正の整数である。命令550は、aビットの長さを有するソースアドレスMと、bビットの長さを有する宛先アドレスMと、長さcのビットによって表される操作Mと、を含み、ここで、a、b、及びcは正の整数である。一例として、aは4、bは4、cは32である。一例として、aビット、bビット、及びcビットは、レガシーマシンの1つ以上のメモリデバイスに格納される。例えば、aビットは、メモリデバイス406または412に格納される(図4A及び図4B)。操作552は、dビットの長さを有するソースレジスタアドレスnと、eビットの長さを有する宛先アドレスnと、長さfのビットによって表される操作nを含み、ここで、d、e、及びfは正の整数である。一例として、dは8、eは8、fは64である。一例として、dビット、eビット、及びfビットは、更新されたマシンの1つ以上のレジスタに格納される。例として、dはaより大きく、eはbより大きく、fはcより大きい。説明すると、aが4、bが4、cが32のとき、dは8、eは8、fは64である。別の例として、aが4、bが4、cが32のとき、dは16、eは16、fは128である。
コンパイル操作を実行するために、基本ブロックコンパイラ104(図1)は、ソースアドレスMをソースレジスタアドレスnに変換し、宛先アドレスMを宛先レジスタアドレスnに変換し、操作Mを操作nに変換して、エミュレートされたPUコード命令Mから基本ブロックnを生成する。例えば、基本ブロックコンパイラ104は、ソースアドレスMの4ビットを右にシフトして、キャッシュ102内の8つのソースレジスタの4つのメモリアドレスを占有し、8つのソースレジスタの残りの4つのメモリアドレスの任意のビットをマスクする。ソースアドレスMの4ビットによって占められる4つのメモリアドレスは、キャッシュ102内の8つのソースレジスタの最下位位置にあり、ビットがマスクされる残りの4つのメモリアドレスは、キャッシュ102内のソースレジスタの8つの最上位位置にある。
別の例として、基本ブロックコンパイラ104は、宛先アドレスMの4ビットを右にシフトして、キャッシュ102内の8つの宛先レジスタの4つのメモリアドレスを占有し、8つの宛先レジスタの残りの4つのメモリアドレスの任意のビットをマスクする。宛先アドレスmの4ビットによって占められる4つのメモリアドレスは、キャッシュ102内の8つの宛先レジスタの最下位位置にあり、ビットがマスクされる残りの4つのメモリアドレスは、キャッシュ102内の8つの宛先レジスタの最上位位置にある。
同様に、別の例として、基本ブロックコンパイラ104は、操作Mの32ビットを右にシフトして、キャッシュ102内の64個の操作レジスタの32個のメモリアドレスを占有し、64個の操作レジスタの残りの32個のメモリアドレスの任意のビットをマスクする。操作Mの32ビットによって占有される32個のメモリアドレスは、キャッシュ102内の32個の操作レジスタの最下位位置にあり、ビットがマスクされる残りの32個のメモリアドレスは、キャッシュ102内の64個の操作レジスタの最上位位置にある。操作nは、キャッシュ102の操作レジスタに格納される。
図6Aは、エミュレーションプロセッサシステム409の構成要素を説明するためのシステム600の実施形態の図である。システム600は、メモリデバイス412と、エミュレーションプロセッサシステム409と、を含む。エミュレーションプロセッサシステム409の基本ブロックコンパイラ104は、パーサまたはデコーダ602を含む。基本ブロックコンパイラ104は、ブロッククリエータ604、ブロックキャッシャ606A、及びブロックリーダ608をさらに含む。エミュレーションプロセッサシステム409は、ブロックディスパッチャ302を含む。
一例として、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、ソフトウェア、ハードウェア、またはそれらの組み合わせを使用して実装される。例えば、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、PLDまたはASICまたはコントローラまたはプロセッサまたはコンピュータプログラムの一部分など、別個の集積回路である。別の例として、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、別個のコンピュータソフトウェアプログラムである。
ゲームコードgcNは、エミュレートされたPUコード命令1、エミュレートされたPUコード命令2というように、エミュレートされたPUコード命令Mまでの、複数の命令を含む。例えば、ゲームコードgcNの各命令は、一連のビットであり、レガシーマシンのプロセッサによって実行され得、仮想オブジェクトを位置P1から位置P2に移動すること、または、仮想オブジェクトの方向をO1からO2に変更すること、または、仮想オブジェクトの一部分のパラメータを改変すること、などの機能を実装する。
パーサ602は、ブロックキャッシャ606及びブロックリーダ608に結合されているブロッククリエータ604に結合されている。ブロックキャッシャ606及びブロックリーダ608はキャッシュ102に結合されている。ブロックリーダ608は、ブロックディスパッチャ302に結合されている。
図6Bは、基本ブロック1~nをコンパイル及び実行するための方法650の実施形態を説明するフローチャートである。方法650は、図6Aのシステム600を使用して示されている。方法650の操作652において、ブロッククリエータ604は、ユーザ入力1などの任意のユーザ入力が受信されているかどうかを判定する。一例として、ユーザ入力1は、ユーザ1によって選択されたハンドヘルドコントローラ414(図4A)の1つ以上のボタンの1つ以上の識別に基づいて生成される信号である。別の例として、ユーザ入力1は、ハンドヘルドコントローラ414を中心とするxyz座標系の原点に対するピッチ、ヨー、及びロールなどの動きの尺度に基づいて生成される信号である。さらに別の例として、ユーザ入力1は、HMDのxyz座標系の原点に対するピッチ、ヨー、及びロールなどの動きの尺度に基づいて生成される信号である。ユーザ入力1の例は、ユーザ入力420(図4A)である。ユーザ入力1の別の例は、ユーザ入力418である(図4A)。
ブロッククリエータ604は、ユーザ入力が受信されていないと判定すると、ユーザ入力が操作652で受信されたかどうかを引き続きチェックする。例えば、基本ブロックコンパイラ104は、キャッシュ102(図1)内に格納された基本ブロック(n+1)~pのいずれも実行せず、基本ブロックコンパイラ104(図1)は、操作652でユーザ入力が受信されていないとき、エミュレートされたPUコード命令1~M(図6A)のいずれも識別しない(ここでpは正の整数である)。操作652でユーザ入力を受信した時点では、基本ブロック1~nは生成されず、キャッシュ102内に格納されていないと想定されている。
一方で、操作652でユーザ入力が受信されたとの判定に応答して、方法650の操作654において、ブロッククリエータ604は、キャッシュ102内に格納された基本ブロック(n+1)~pのうちの1つ以上が、ユーザ入力を満たすかどうかを判定する。例えば、ブロッククリエータ604は、キャッシュ102から基本ブロック(n+1)~pにアクセスするために要求をブロックリーダ608に送信する。この例では、ブロックリーダ608は、要求を受信すると、キャッシュ102から基本ブロック(n+1)~pを読み取り、基本ブロック(n+1)~pをブロッククリエータ604に送信する。さらに、この例では、ブロッククリエータ604は、基本ブロック(n+1)~pのうちの1つ以上の機能が、処理などのユーザ入力1を満たすかどうかを判定する。説明すると、ユーザ入力1が、仮想オブジェクトの位置を位置P1から位置P2に変更することを示すとき、ブロッククリエータ604は、基本ブロック(n+1)~pのいずれかが、位置P1を位置P2で上書きする操作が含むかどうかを判定する。1つ以上の基本ブロック(n+1)~pが位置P1をP2で上書きする操作を含むと判定すると、ブロッククリエータ604は、ブロック(n+1)~pのうちの1つ以上の1つ以上の機能がユーザ入力1を満たすと判定する。一方で、基本ブロック(n+1)~pのいずれも位置P1をP2で上書きする操作を含まないと判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pの機能がユーザ入力1を満たさないと判定する。
別の説明として、ユーザ入力1が、仮想オブジェクトの方向を方向O1から方向O2に変更するためのものであるとき、ブロッククリエータ604は、基本ブロック(n+1)~pのいずれかが、方向O1を方向O2で上書きする操作が含まれるかどうかを判定する。基本ブロック(n+1)~pのうちの1つ以上が、方向O1をO2で上書きする操作を含むと判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pのうちの1つ以上の1つ以上の機能が、ユーザ入力1を満たすと判定する。一方で、基本ブロック(n+1)~pのいずれも方向O1をO2で上書きする操作を含まないと判定した場合、ブロッククリエータ604は、基本ブロック(n+1)~pの機能が、ユーザ入力1を満たさないと判定する。さらに別の説明として、ユーザ入力1が、仮想オブジェクトの一部分のパラメータの値を第1の値から第2の値に変更することであるとき、ブロッククリエータは、基本ブロック(n+1)~pのいずれかが、第1の値を第2の値で上書きする操作が含まれるかどうかを判定する。基本ブロック(n+1)~pのうちの1つ以上が、第1の値を第2の値で上書きする操作を含むと判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pのうちの1つ以上の1つ以上の機能が、ユーザ入力1を満たすと判定する。一方で、基本ブロック(n+1)~pのいずれも第1の値を第2の値で上書きする操作を含まないと判定したとき、ブロッククリエータ604は、基本ブロック(n+1)~pの機能がユーザ入力1を満たさないと判定する。
さらに別の説明として、ユーザ入力1がレガシーゲームNを開始することであるとき、ブロッククリエータ604は、基本ブロック(n+1)~pのいずれかが、レガシーゲームNの開始を表すためのレガシーゲームNのゲームタイトルGNを含むアニメーションを生成するために実行され得るかどうかを判定する。基本ブロック(n+1)~pのうちの1つ以上が、アニメーションを生成するために実行され得ると判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pのうちの1つ以上の1つ以上の機能が、ユーザ入力1を満たすと判定する。一方で、基本ブロック(n+1)~pのいずれもアニメーションを生成するために実行され得ないと判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pの機能が、ユーザ入力1を満たさないと判定する。
基本ブロック(n+1)~pのうちの1つ以上の機能が、ユーザ入力1を満たすと判定すると、方法600の操作656において、ブロックディスパッチャ302は、基本ブロック(n+1)~pのうちの1つ以上を実行する。例えば、基本ブロック(n+1)~pのうちの1つ以上の機能がユーザ入力1を満たすと判定すると、ブロッククリエータ604は、基本ブロック(n+1)~pのうちの1つ以上を実行するためにブロックディスパッチャ302に命令を送信する。この例では、命令の受信に応答して、ブロックディスパッチャ302は、コマンドをブロックリーダ608に送信して、操作652で受信したユーザ入力を満たすために、キャッシュ102から基本ブロック(n+1)~pのうちの1つ以上を読み取る。また、この例では、コマンドに応答してキャッシュ102から基本ブロックのうちの1つ以上を受信すると、ブロックディスパッチャ302は、基本ブロック(n+1)~pのうちの1つ以上を実行する。
一方で、ブロック(n+1)~pの機能がユーザ入力1を満たさないと判定すると、方法600の操作658において、ブロックコンパイラ102は、操作652で受信したユーザ入力を処理するためのエミュレートされたPUコード命令1~Mの1つ以上を識別する。例えば、ブロック(n+1)~pまでの機能がユーザ入力1を満たさないと判定すると、ブロッククリエータ604は、パーサ602に要求を送信してゲームコードgcNを解析して、ユーザ入力1で識別された機能を満たすゲームコードgcNのエミュレートされたPUコード命令1~Mの1つ以上を識別及び取得する。この例では、要求の受信に応答して、パーサ602は、メモリデバイス412にアクセスして、ゲームコードgcNを解析し、エミュレートされたPUコード命令1~Mのうちの1つ以上の機能がユーザ入力1を満たすかどうかを判定し、エミュレートされたPUコード命令1~Mのうちの1つ以上の機能が、ユーザ入力1を満たすと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mの1つ以上をブロッククリエータ604に提供する。
説明すると、ユーザ入力1が、仮想オブジェクトの位置を位置P1から位置P2に変更するためのものであるとき、パーサ602は、エミュレートされたPUコード命令1~Mのいずれかが、位置P1を位置P2で上書きする操作を含むかどうかを判定する。エミュレートされたPUコード命令1~Mのうちの1つ以上が、位置P1をP2で上書きする操作を含むと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mのうちの1つ以上の1つ以上の機能が、ユーザ入力1を満たすと判定する。一方で、エミュレートされたPUコード命令1~Mのいずれも位置P1をP2で上書きする操作を含んでいないと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mの機能がユーザ入力1を満たさないと判定する。
別の説明として、ユーザ入力1が、仮想オブジェクトの方向を方向O1から方向O2に変更するものであるとき、パーサ602は、エミュレートされたPUコード命令1~Mのいずれかが、方向O1を方向O2で上書きする操作を含むかどうかを判定する。エミュレートされたPUコード命令1~Mのうちの1つ以上が、方向O1をO2で上書きする操作を含むと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mのうちの1つ以上の1つ以上の機能がユーザ入力1を満たすと判定する。一方で、エミュレートされたPUコード命令1~Mのいずれも位置O1をO2で上書きする操作を含んでいないと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mの機能がユーザ入力1を満たさないと判定する。さらに別の例として、ユーザ入力1が、仮想オブジェクトの一部分のパラメータの値を第1の値から第2の値に変更するものであるとき、パーサ602は、エミュレートされたPUコード命令1~Mのいずれかが、第1の値を第2の値で上書きする操作を含むかどうかを判定する。エミュレートされたPUコード命令1~Mのうちの1つ以上が、第1の値を第2の値で上書きする操作を含むと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mのうちの1つ以上の1つ以上の機能が、ユーザ入力1を満たすと判定する。一方で、エミュレートされたPUコード命令1~Mのいずれも第1の値を第2の値で上書きする操作を含まないと判定すると、パーサ602は、エミュレートされたPUコード命令1~Mの機能が、ユーザ入力1を満たさないと判定する。
方法600の操作660において、ユーザ入力1を満たすエミュレートされたPUコード命令1~Mのうちの1つ以上がパーサ602から受信されると、ブロッククリエータ604は、上述のコンパイル操作を適用して、エミュレートされたPUコード命令1~Mのうちの1つ以上から1つ以上の基本ブロック1~nを生成する。例えば、ブロッククリエータ604は、1つ以上の基本ブロック1~nをコンパイルし、1つ以上の基本ブロック1~nをブロックキャッシャ606に送信し、ブロックディスパッチャ302に命令を送信して、基本ブロック1~nのうちの1つ以上を実行する。1つ以上の基本ブロック1~nを受信すると、ブロックキャッシャ606は、1つ以上の基本ブロック1~nをキャッシュ102に格納する。
方法600の操作662において、1つ以上の基本ブロック1~nを実行するための命令をブロッククリエータ604から受信すると、ブロックディスパッチャ302は、1つ以上の基本ブロック1~nを実行して、操作652で受信したユーザ入力を処理する。例えば、ブロックディスパッチャ302は、キャッシュ102から基本ブロック1~nのうちの1つ以上を読み取るために、ブロックリーダ608に要求を送信する。コマンドを受信すると、ブロックリーダ608は、キャッシュ102から基本ブロック1~nのうちの1つ以上を読み取り、基本ブロック1~nのうちの1つ以上をブロックディスパッチャ302に提供する。基本ブロック1~nのうちの1つ以上を受信すると、ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、仮想環境452を生成する(図4B)。説明すると、ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、画像フレームを生成し、この画像フレームは、仮想オブジェクト454の位置及び方向などの仮想環境データと、仮想オブジェクト454のレガシーグラフィカルパラメータなどのパラメータ、及び仮想環境452内の他の仮想オブジェクトの位置と方向、及び仮想環境452内の他の仮想オブジェクトのレガシーグラフィカルパラメータなどのパラメータを含む。さらに、この例では、仮想オブジェクト454の位置もしくは方向、またはそれらの組み合わせが変化するとき、仮想環境が変化する。ブロックディスパッチャ302は、画像フレームをエミュレーションプロセッサシステム409のGPUに提供して、ディスプレイデバイス410(図4A)のディスプレイ画面上に仮想環境452をレンダリングなどして、表示する。別の例として、ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、レガシーオーディオパラメータを含む1つ以上のオーディオフレームを生成し、1つ以上のオーディオフレームをクライアントデバイスに提供し、1つ以上のオーディオフレームに基づいて音声を出力する。説明すると、各オーディオフレームは、1つ以上のレガシーオーディオパラメータを含むオーディオファイルである。操作652においてユーザ入力1が受信された後、ユーザ入力2などの別のユーザ入力が受信されると、方法600が繰り返される。
一実施形態では、画像フレームは、ブロックディスパッチャ302からディスプレイデバイス410のGPUに提供されて、ディスプレイデバイス410のディスプレイ画面上に仮想環境452を表示する。
図6Cは、異なるユーザ入力について、異なる基本ブロックまたは基本ブロックの異なるセットが動的にコンパイルされることを示すためのシステム670の実施形態の図である。システム670は、メモリデバイス412、基本ブロックコンパイラ104、ブロックディスパッチャ302、及びキャッシュ102を含む。基本ブロックコンパイラ104がユーザ入力1を受信すると、基本ブロックコンパイラ104は、ユーザ入力1に対応する基本ブロック1が、キャッシュ102に格納されているかどうかを判定する。例えば、基本ブロック1が、ユーザ入力1を処理するための機能を含むとき、基本ブロック1は、ユーザ入力1に対応する。説明すると、ユーザ入力1が、仮想オブジェクトを位置P1から位置P2に移動するものであり、基本ブロック1が、宛先レジスタアドレス1に格納された位置P1を位置P2で更新する操作を含むとき、基本ブロック1は、ユーザ入力1を処理することができる。この図では、ユーザ入力1は、ハンドヘルドコントローラ414(図4A)上の右への移動ボタン、または左への移動ボタン、または上への移動ボタン、または下への移動ボタンの選択を示す信号である。同様に、基本ブロック2がユーザ入力1を処理するための機能を含まないとき、基本ブロック2はユーザ入力1に対応しない。説明すると、ユーザ入力1が、仮想オブジェクトの方向を変更せずに位置P1から位置P2に仮想オブジェクトを移動するためのものであり、基本ブロック2が、宛先レジスタ2に格納された方向O1を方向O2で更新する操作を含むとき、基本ブロック2はユーザ入力1を処理することができない。ユーザ入力1を処理することができる基本ブロック1がキャッシュ102に格納されていると判定すると、基本ブロックコンパイラ104は、基本ブロック1を実行するために、基本ブロック1をブロックディスパッチャ302に提供する。
一方で、基本ブロック1がキャッシュ102内に格納されていないと判定すると、基本ブロックコンパイラ104は、メモリデバイス412内に格納されたエミュレートされたPUコード106を解析して、ユーザ入力1に対応するエミュレートされたPUコード命令1を識別する。例えば、基本ブロックコンパイラ104は、エミュレートされたPUコード106を解析して、エミュレートされたPUコード命令1が、ユーザ入力1を満たすこと(処理することなど)を識別する。説明すると、ユーザ入力1が、仮想オブジェクトを位置P1から位置P2に移動させるためのものであり、エミュレートされたPUコード命令1が、宛先アドレス1に格納された位置P1を位置P2で更新する機能を含むとき、エミュレートされたPUコード命令1は、ユーザ入力1を処理することができる。同様に、エミュレートされたPUコード命令2が、ユーザ入力1を処理するための機能を含まないとき、エミュレートされたPUコード命令2は、ユーザ入力1に対応しない。説明すると、ユーザ入力1が、仮想オブジェクトの方向を変更せずに位置P1から位置P2に仮想オブジェクトを移動するためのものであり、エミュレートされたPUコード命令2が、宛先アドレス2に格納された方向O1を方向O2で更新する操作を含むとき、エミュレートされたPUコード命令2は、ユーザ入力1を処理することができない。
エミュレートされたPUコード命令1がユーザ入力1を処理でき、エミュレートされたPUコード命令2がユーザ入力1を処理できないと判定すると、基本ブロックコンパイラ104は、メモリデバイス412からエミュレートされたPUコード命令1にアクセス(読み取りなど)し、エミュレートされたPUコード命令1から基本ブロック1をコンパイルする。基本ブロックコンパイラ102は、ユーザ入力1の受信に応答して、エミュレートされたPUコード命令2から基本ブロック2をコンパイルしない。基本ブロックコンパイラ104は、基本ブロック1をキャッシュ102内に格納し、ブロックディスパッチャ302に命令を送信して、基本ブロック1にアクセスして実行する。命令を受信すると、ブロックディスパッチャ302は、キャッシュ102から基本ブロック1を読み取り、基本ブロック1を実行する。
同様に、基本ブロックコンパイラ104がユーザ入力2を受信すると、基本ブロックコンパイラ104は、ユーザ入力2に対応する基本ブロック2が、キャッシュ102に格納されているかどうかを判定する。例えば、基本ブロック2が、ユーザ入力2を処理するための機能を含むとき、基本ブロック2は、ユーザ入力2に対応する。説明すると、ユーザ入力2が、仮想オブジェクトを方向O1から方向O2に移動するものであり、基本ブロック2が、宛先レジスタアドレス2に格納された方向O1を方向O2で更新する操作を含むとき、基本ブロック2は、ユーザ入力2を処理することができる。この図では、ユーザ入力2は、ハンドヘルドコントローラ414上の時計回りに回転するボタンか、または反時計回りに回転するボタンの選択を示す信号である。同様に、基本ブロック1がユーザ入力2を処理するための機能を含まないとき、基本ブロック1はユーザ入力2に対応しない。説明すると、ユーザ入力2が、仮想オブジェクトの位置を変更せずに方向O1から方向O2に仮想オブジェクトを移動するためのものであり、基本ブロック1が、宛先レジスタ1に格納された位置P1を位置P2で更新する操作を含むとき、基本ブロック1はユーザ入力2を処理することができない。ユーザ入力2を処理することができる基本ブロック2がキャッシュ102に格納されていると判定すると、基本ブロックコンパイラ104は、基本ブロック2を実行するために、基本ブロック2をブロックディスパッチャ302に提供する。
一方で、基本ブロック2がキャッシュ102内に格納されていないと判定すると、基本ブロックコンパイラ104は、メモリデバイス412内に格納されたエミュレートされたPUコード106を解析して、ユーザ入力2に対応するエミュレートされたPUコード命令2を識別する。例えば、基本ブロックコンパイラ104は、エミュレートされたPUコード106を解析して、エミュレートされたPUコード命令2が、ユーザ入力2を満たすこと(処理することなど)を識別する。説明すると、ユーザ入力2が、仮想オブジェクトを方向O1から方向O2に移動させるためのものであり、エミュレートされたPUコード命令2が、宛先アドレス2に格納された方向O1を方向O2で更新する機能を含むとき、エミュレートされたPUコード命令2は、ユーザ入力2を処理することができる。同様に、エミュレートされたPUコード命令1が、ユーザ入力2を処理するための機能を含まないとき、エミュレートされたPUコード命令1は、ユーザ入力2に対応しない。説明すると、ユーザ入力2が、仮想オブジェクトの方向を変更せずに、方向O1から方向O2に仮想オブジェクトを移動するためのものであり、エミュレートされたPUコード命令1が、宛先アドレス1に格納された位置P1を位置P2で更新する操作を含むとき、エミュレートされたPUコード命令1は、ユーザ入力2を処理することができない。
エミュレートされたPUコード命令2が、ユーザ入力2を処理でき、エミュレートされたPUコード命令1が、ユーザ入力2を処理できないと判定すると、基本ブロックコンパイラ104は、メモリデバイス412からエミュレートされたPUコード命令2にアクセス(読み取るなど)して、エミュレートされたPUコード命令2をコンパイルして、基本ブロック2を生成する。基本ブロックコンパイラ102は、ユーザ入力2の受信に応答して、エミュレートされたPUコード命令1をコンパイルしない。基本ブロックコンパイラ104は、基本ブロック2をキャッシュ102内に格納し、ブロックディスパッチャ302に命令を送信して、基本ブロック2にアクセスして実行する。命令を受信すると、ブロックディスパッチャ302は、キャッシュ102から基本ブロック2を読み取り、基本ブロック2を実行する。
図7Aは、メモリデバイス412からのエミュレートされたPUコード106の削除を説明するためのシステム700の実施形態の図である。システム700は、ブロッククリエータ604、命令リムーバ702、及びメモリデバイス412を含む。命令リムーバ702の例には、プロセッサ、ASIC、PLD、コンピュータプログラム、コンピュータプログラムの一部分、及びマイクロコントローラが含まれる。命令リムーバ702は、ブロッククリエータ604に結合され、かつメモリデバイス412に結合されている。
図7Bは、エミュレートされたPUコード106(図6C)をメモリデバイス412(図6C)から削除するための方法720の実施形態を説明するためのフローチャートである。方法720は、エミュレートされたPUコード106のすべての命令がコンパイルされているかどうかを判定するための操作702を含む。例えば、ブロッククリエータ604(図7A)は、ゲームコードgcNのエミュレートされたPUコード命令1~Mのすべてがコンパイルされているかどうかを判定する。説明すると、ゲームコードgcNのエミュレートされたPUコード命令1~Mのいずれかをコンパイルする前に、ブロッククリエータ604は、レガシーマシンのプロセッサに要求を送信して、ゲームコードgcNのエミュレートされたPUコード命令1~Mのすべてのアイデンティティを取得する。この図では、ブロッククリエータ604は、1つ以上のビットなどのゲームコードgcNのアイデンティティをレガシーマシンのプロセッサに送信して、ゲームコードgcNのエミュレートされたPUコード命令1~Mのすべてのアイデンティティを取得する。エミュレートされたPUコード命令1~Mのアイデンティティの例には、1つ以上のビットが含まれる。説明すると、エミュレートされたPUコード命令Mのアイデンティティは、ビットの第1のシーケンスによって表され、エミュレートされたPUコード命令M-1のアイデンティティは、ビットの第2のシーケンスによって表され、これは第1のシーケンスとは異なっている。エミュレートされたPUコード命令1~Mのアイデンティティをレガシーマシンのプロセッサから受信すると、ブロッククリエータ604は、キャッシュ102内のテーブルにアイデンティティを格納する。エミュレートされたPUコード命令1~Mの各々がコンパイルされると、ブロッククリエータ604は、エミュレートされたPUコード命令1~Mのうちのどれがコンパイルされているかを識別する指示を含むようにテーブルを更新する。ブロッククリエータ604は、エミュレートされたPUコード命令1~Mのうちのどれがコンパイルされているかを識別する指示から、エミュレートされたPUコード命令1~Mのすべてがコンパイルされているかどうかを判定する。
ゲームコードgcNのエミュレートされたPUコード命令1~Mのすべてがコンパイルされていると判定すると、ブロッククリエータ604は、ゲームコードgcNをメモリデバイス412から削除するコマンドを命令リムーバ702(図7A)に送信する。コマンドを受信すると、方法720の操作724において、命令リムーバ702は、メモリデバイス412からエミュレートされたPUコード命令1~Mを消去する。
一方で、ゲームコードgcNのエミュレートされたPUコード命令1~Mのうちの1つ以上がテーブルに基づいてコンパイルされていないと判定すると、方法720の操作726において、ブロッククリエータ604は、命令リムーバ702へコマンドを送信せず、メモリデバイス412からゲームコードgcNを削除する。ゲームコードgcNを削除するコマンドを受信するまで、命令リムーバ702は、メモリデバイス412からエミュレートされたPUコード命令1~Mを削除しない。
一実施形態では、ブロッククリエータ604は、キャッシュ102に格納されているゲームコードgcNが、ゲームコードgcNがメモリデバイス412からアクセスされる最も遅い時間から所定の期間内に、メモリデバイス412(図4A)からアクセスされるかどうかを判定する。一例として、ブロッククリエータ604は、コンピュータネットワーク408を介してインターネットクロックにアクセスして、最も遅い時間と所定の期間を判定することができる。別の例として、ブロッククリエータ604は、最も遅い時間と所定の期間をカウントするために、クロック発振器などのクロックソースを含む。ゲームコードgcNが所定の期間内にメモリデバイス412からアクセスされないと判定すると、ブロッククリエータ604は、命令リムーバ702にコマンドを送信し、メモリデバイス412からゲームコードgcNを削除する。一例として、ゲームコードgcNが所定の期間内にアクセスされないとき、エミュレートされたPUコード命令1~Mの大部分は、基本ブロックコンパイラ104によってアクセスされて、基本ブロック1~nのうちの1つ以上をコンパイルする。別の例として、ゲームコードgcNが所定の期間内にアクセスされないとき、ゲームタイトルGNを有するレガシーゲームNのプレイ中に頻繁に使用されるエミュレートされたPUコード命令1~Mのうちのいくつかは、基本ブロックコンパイラ104によってアクセスされ、基本ブロック1~nのうちの1つ以上をコンパイルする。一方で、ゲームコードgcNが所定の期間内にアクセスされたと判定すると、ブロッククリエータ604は、コマンドを命令リムーバ702に送信せず、ゲームコードgcNは、メモリデバイス412から削除されない。
図8Aは、基本ブロックの検証を説明するためのエミュレーションプロセッサシステム800の実施形態の図である。エミュレーションプロセッサシステム800は、エミュレーションプロセッサシステム409の一例である(図4B)。エミュレーションプロセッサシステム800は、基本ブロックコンパイラ104、キャッシュ102、ブロックバリデータ802、及びブロックフラッガ804を含む。ブロックバリデータ802は、ブロッククリエータ604、ブロックディスパッチャ302、パーサ602、及びブロックフラッガ804に結合されている。クロックバリデータ802及びブロックフラガー804のそれぞれは、キャッシュ102に結合されている。
一例として、ブロックバリデータ802は、ASIC、またはPLD、またはマイクロコントローラ、またはプロセッサ、またはコンピュータプログラム、またはコンピュータプログラムの一部分として実装される。また、一例として、ブロックフラガー804は、ASIC、またはPLD、またはマイクロコントローラ、またはプロセッサ、またはコンピュータプログラム、またはコンピュータプログラムの一部分として実装される。
一実施形態では、ASIC、PLD、マイクロコントローラ、マイクロプロセッサ、コントローラ、及びプロセッサという用語は、本明細書では互換的に使用されている。
図8Bは、エミュレーションプロセッサシステム800(図8A)によって実行される検証操作を説明するための方法850の一実施形態のフローチャートである。方法800の操作852において、ブロックバリデータ802(図8A)は、基本ブロックnがコンパイルされているかどうかを判定する。例えば、ブロックバリデータ802は、キャッシュ102にアクセス(読み取るなど)して、以前にキャッシュ102内に格納された基本ブロック1~n-1と比較して、基本ブロックnなどの新しい基本ブロックが、キャッシュ102に格納されているかどうかを判定する。ブロックバリデータ802は、キャッシュ102内に格納された基本ブロック1~n-1を以前に識別した。基本ブロックnがキャッシュされていないと判定すると、ブロックバリデータ802は、キャッシュ102へのアクセスを継続し、新しい基本ブロックがキャッシュされているかどうかを判定する。例えば、ブロックバリデータ802は、キャッシュ102内に格納されている基本ブロック1~n-1を定期的に解析して、基本ブロックnがキャッシュ102に格納されているかどうかを判定する。
基本ブロックnがキャッシュされていることを判定すると、方法800の操作854において、ブロックバリデータ802は、そこから基本ブロックnがコンパイルされる、エミュレートされたPUコード命令1~Mのうちの1つ以上からの第1のハッシュ値を生成する。例えば、ブロックバリデータ802は、パーサ602に要求を送信し、エミュレートされたPUコード命令1~Mのうちの1つ以上をメモリデバイス412から取得する。要求は、キャッシュ102内の基本ブロックnのメモリアドレスのアイデンティティを含む。基本ブロックnのメモリアドレスのアイデンティティは、要求によって取得されるなど、ブロックバリデータ602によってブロッククリエータ604から受信される。ブロックバリデータ802からの要求を受信すると、パーサ602は、メモリデバイス412からエミュレートされたPUコード命令1~Mのうちの1つ以上を読み取り、エミュレートされたPUコード命令1~Mのうちの1つ以上をブロックバリデータ802に提供する。説明すると、エミュレートされたPUコード命令1~Mのうちの1つ以上が、基本ブロックnをコンパイルするために基本ブロックコンパイラ104に提供されるとき、パーサ602は、キャッシュ102内の基本ブロックnによって占有された1つ以上のメモリアドレスの1つ以上のアイデンティティと、メモリデバイス412内のエミュレートされたPUコード命令1~Mのうちの1つ以上によって占有された1つ以上のメモリアドレスの1つ以上のアイデンティティとの間の1対1の対応を格納する。パーサ602は、ブロックバリデータ802からキャッシュ102内の基本ブロックnのメモリアドレスのアイデンティティを受信し、1対1の対応からメモリデバイス412内のエミュレートされたPUコード命令1~Mのうちの1つ以上の1つ以上のメモリアドレスを識別する。パーサ602は、メモリデバイス412の1つ以上のメモリアドレスからエミュレートされたPUコード命令1~Mのうちの1つ以上を読み取り、エミュレートされたPUコード命令1~Mのうちの1つ以上をブロックバリデータ802に提供する。
この例で続けると、エミュレートされたPUコード命令1~Mのうちの1つ以上をパーサ602から受信すると、ブロックバリデータ802は、エミュレートされたPUコード命令1~Mのうちの1つ以上から第1のハッシュ値を生成し、キャッシュ102内に第1のハッシュ値を格納する。説明すると、ブロックバリデータ802は、基本ブロックnに対応するエミュレートされたPUコード命令1~Mのうちの1つ以上からダイジェストまたはチェックサムを生成する。この例では、第1のハッシュ値は、基本ブロックnを含むようにキー設定された、キャッシュ102の1つ以上のレジスタに格納される。
方法800の操作856において、ブロックバリデータ802は、コマンドをパーサ602に送信して、1つ以上のエミュレートされたPUコード命令1~Mが格納されているメモリデバイス412内で、1つ以上のメモリアドレスが上書きされているかどうかを判定する。メモリデバイス412内の1つ以上のメモリアドレスは、レガシーマシンのコンパクトディスク読み取り専用メモリ(CD-ROM)からのデータで上書きされることができる。データは、エミュレートされたPUコード命令1~Mのうちの1つ以上への更新であることができる。エミュレートされたPUコード命令1~Mのうちの1つ以上への更新は、更新された命令と呼ばれる。あるいは、データは、破損している場合があるが、これは更新された命令ではない。パーサ602は、ブロックバリデータ802からコマンドを受信すると、要求をレガシーマシンのプロセッサに送信して、エミュレートされたPUコード要求1~Mのうちの1つ以上が格納されているメモリデバイス412内で、1つ以上のメモリアドレスが上書きされているかどうかを判定する。
パーサ602から要求を受信すると、レガシーマシンのプロセッサは、要求に対する応答を提供し、応答は、1つ以上のメモリアドレスが、エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内で上書きされているかどうかを示す。エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内の1つ以上のメモリアドレスが上書きされていないという応答を受信すると、ブロックバリデータ802は、コマンドをブロックフラッガ804(図8A)に送信し、基本ブロックnを無効としてマークしないようにする。コマンドを受信すると、方法800の操作858において、ブロックフラッガ804は、基本ブロックnを無効としてマークしない。
一方で、エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内の1つ以上のメモリアドレスが、上書きされているという応答を受信すると、方法850の操作860において、ブロックバリデータ802は、コマンドをブロックフラッガ804(図8A)に送信し、基本ブロックnを無効としてマークする。基本ブロックnを無効としてマークするコマンドを受信すると、ブロックフラッガ804は、基本ブロックnを無効としてマークする。例えば、ブロックフラッガ804は、キャッシュ102内の基本ブロックnにアクセスし、基本ブロックnを有するキャッシュ102内のメモリアドレス内に、基本ブロックnが無効であることを示すために無効マークn(図5A)などの識別子を含む。無効なマークnの一例は、ビットのシーケンスである。
一実施形態では、ハッシュ値は検証結果の一例である。
図8Cは、図8Bの方法800のフローチャートの続きである。方法800の操作862において、ブロックバリデータ802(図8A)は、基本ブロックnが実行されるべきかどうかを判定する。例えば、ブロックディスパッチャ302は、基本ブロックnが実行されるべきであるという指示をブロックバリデータ802に送信する。基本ブロックnが実行されるべきであるという指示をブロックディスパッチャ302から受信すると、ブロックバリデータ802は、基本ブロックnが実行されるべきであると判定する。指示が受け取られるまで、ブロックバリデータ802は、基本ブロックnが検証されるべきであると判定しない。
基本ブロックnが実行されるべきであると判定すると、ブロックバリデータ802は、方法800の操作864において、基本ブロックnが無効としてマークされているかどうかを判定する。例えば、ブロックバリデータ802は、基本ブロックnが無効としてフラグが立てられているかどうかを判定するために、ブロックフラッガ804にコマンドを送信する。コマンドを受信すると、ブロックフラッガ804は、基本ブロックnが無効としてフラグが立てられているかどうかの指示をブロックバリデータ802に送信する。説明すると、ブロックフラッガ804は、基本ブロックnにアクセスして、基本ブロックnが無効マークnを含むかどうかを判定して、無効の指示を生成して、ブロックバリデータ802に送信する。別の説明として、ブロックフラッガ804は、基本ブロックnにアクセスして、基本ブロックnが無効マークnを含まないかどうかを判定して、無効の欠如の指示を生成し、ブロックバリデータ802に送信する。ブロックフラッガ804から、基本ブロックnが無効としてマークされているという指示を受信すると、ブロックバリデータ802は、基本ブロックnが無効であると判定する。一方で、基本ブロックnに無効マークnがないという指示をブロックフラッガ804から受信すると、ブロックバリデータ802は、基本ブロックnが無効としてマークされていないと判定する。
基本ブロックnが無効としてマークされていないと判定すると、方法800の操作866において、基本ブロックnが実行される。例えば、操作866は操作662(図6B)に類似している。説明すると、ブロックバリデータ802は、基本ブロックnを実行するためにブロックディスパッチャ302にコマンドを送信する。基本ブロックnを実行するコマンドを受信すると、ブロックディスパッチャ302は基本ブロックnを実行する。この説明では、基本ブロックnを実行するためのコマンドがブロックバリデータ802から受信されるまで、ブロックディスパッチャ302は基本ブロックnを実行しない。
一方で、基本ブロックnが無効としてマークされているとの判定に応答して、方法800の操作866において、ブロックバリデータ802は、基本ブロックnが実際に有効であるかどうかを判定する。例えば、基本ブロックnが無効としてマークされていると判定すると、ブロックバリデータ802は、基本ブロックnがコンパイルされるエミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内の同じメモリアドレスに格納された更新された命令または破損したデータのいずれかから第2のハッシュ値を生成する。この例では、第2のハッシュ値は、基本ブロックnを含むようにキー設定された、キャッシュ102の1つ以上のレジスタに格納される。説明すると、ブロックバリデータ802は、パーサ602に要求を送信して、メモリデバイス412内の1つ以上のメモリアドレスに格納された更新された命令または破損したデータを取得する。パーサ602は、要求を受信すると、メモリデバイス412からの1つ以上のメモリアドレスから更新された命令または破損したデータを読み取り、更新された命令または破損したデータをブロックバリデータ802に提供する。この図では、ブロックバリデータ802は、更新された命令または破損したデータから第2のハッシュ値を生成し、この第2のハッシュ値をキャッシュ102に格納する。例えば、ブロックバリデータ802は、更新された命令または破損したデータからダイジェストまたはチェックサムを生成する。この図では、ブロックバリデータ802は、第2のハッシュ値を第1のハッシュ値と比較して、基本ブロックnが有効であるかどうかを判定する。比較に基づいて、第1のハッシュ値と第2のハッシュ値との間に一致があると判定すると、ブロックバリデータ802は、基本ブロックnが有効であると判定する。この一致は、更新された命令から第2のハッシュ値が生成されたときに発生する。一方で、この比較に基づいて、第1のハッシュ値と第2のハッシュ値との間に一致がないと判定すると、ブロックバリデータ802は、基本ブロックnが無効であると判定する。この一致の欠如は、破損したデータから第2のハッシュ値が生成されたときに発生する。
基本ブロックnが有効であるとの判定に応答して、方法800の操作870において、無効なマークnが除去される。例えば、ブロックバリデータ802は、ブロックフラッガ804にコマンドを送信して、キャッシュ102に格納された基本ブロックnから無効なマークnを除去する。ブロックバリデータ802からコマンドを受信すると、ブロックフラッガ804は、キャッシュ102から基本ブロックnにアクセスし、基本ブロックnから無効なマークnを消去する。説明すると、ブロックフラッガ804は、無効なマークnが格納されているキャッシュ102の1つ以上のメモリアドレスから無効なマークnを消去する。無効なマークnを除去すると、ブロックフラッガ804は、基本ブロックnを実行するためにブロックディスパッチャ302にコマンドを送信し、コマンドを受信すると、操作866において、ブロックディスパッチャ302は、基本ブロックnを実行する。一例として、ブロックディスパッチャ302は、基本ブロックnを実行するためのコマンドがブロックフラッガ804から受信されるまで、基本ブロックnを実行しない。
一方で、基本ブロックnが有効でないと判定すると、方法800の操作872において、基本ブロックnと同じ機能または操作を有する追加の基本ブロックがコンパイルされる。例えば、ブロックバリデータ802は、基本ブロックnを実行しないようにブロックディスパッチャ302にコマンドを送信し、基本ブロックnが無効であるという指示をブロッククリエータ604に送信する。指示を受信すると、ブロッククリエータ604は、基本ブロックnを再コンパイルする。説明すると、追加の基本ブロックが、追加のレガシーマシンのメモリデバイス内に格納された、エミュレートされたPUコード命令1~Mの1つ以上などのエミュレートされたPUコード命令の追加セットからコンパイルされることを除いて、ブロッククリエータ604は、メモリデバイス412に格納されたエミュレートされたPUコード命令1~Mのうちの1つ以上から基本ブロックnをコンパイルするのと同じ方法で追加の基本ブロックをコンパイルする。追加のレガシーマシンは、メモリデバイス412を含むレガシーマシンとは異なっている。また、エミュレートされたPUコード命令の追加セットは、ゲームコードgcNの追加セットと同じゲームタイトルGNのものである。別の説明として、追加の基本ブロックが、エミュレートされたPUコード命令1~Mが格納されている、メモリアドレスとは異なるメモリデバイス412のメモリアドレス内に格納された、エミュレートされたPUコード命令1~Mのうちの1つ以上などのメモリデバイス412のエミュレートされたPUコード命令の追加セットからコンパイルされることを除いて、ブロッククリエータ604は、メモリデバイス412に格納されたエミュレートされたPUコード命令1~Mのうちの1つ以上から基本ブロックnをコンパイルするのと同じ方法で追加の基本ブロックをコンパイルする。さらに別の説明のように、追加の基本ブロックが、メモリデバイス412とは異なるメモリデバイス内に格納された、エミュレートされたPUコード命令1~Mの1つ以上などのエミュレートされたPUコード命令の追加セットからコンパイルされることを除いて、ブロッククリエータ604は、メモリデバイス412に格納されたエミュレートされたPUコード命令1~Mのうちの1つ以上から基本ブロックnをコンパイルするのと同じ方法で追加の基本ブロックをコンパイルする。
追加の基本ブロックは、実行のためにブロッククリエータ604からブロックディスパッチャ302に送信される。例えば、ブロックディスパッチャ302は、追加の基本ブロックを実行して、仮想環境452(図4B)などの追加の仮想環境の一部分を生成する。説明すると、ブロックディスパッチャ302は、追加の基本ブロックを実行して、画像フレームの一部を生成し、この画像フレームは、仮想オブジェクト454の位置及び方向、仮想オブジェクト454のパラメータ、仮想環境452内の他の仮想オブジェクトの位置及び方向、及び追加の仮想環境内の他の仮想オブジェクトのパラメータなどの追加の仮想環境データを含む。ブロックディスパッチャ302は、画像フレームをエミュレーションプロセッサシステム409のGPUに提供して、ディスプレイデバイス410のディスプレイ画面上に追加の仮想環境をレンダリングするなどして表示する。
方法850は、基本ブロックn及び追加の基本ブロックを参照して示されているが、方法850は、追加の基本ブロックが生成されるのと同じ方法で生成される他の基本ブロック1~(n-1)及びより多くの追加の基本ブロックに等しく適用可能であることに留意されたい。
一実施形態では、エミュレートされたPUコード命令1~Mのセットは、レガシーマシンの外部に配置された1つ以上のメモリデバイスの第1のセットに格納され、エミュレートされたPUコード命令の追加のセットは、追加のレガシーマシンの外部に配置された1つ以上のメモリデバイスの第2のセットに格納されている。
図9Aは、レガシーマシン900の実施形態を説明するための図である。レガシーマシン900は、レガシーCPU902、レガシーGPU904、レガシーAPU910、メモリデバイス906、及びCD-ROMドライブ908を含む。メモリデバイス906は、メモリデバイス412(図4A)の一例である。レガシーCPU902の一例は、1クロックサイクル中に最大32ビットを処理することができる32ビットCPUである。また、レガシーGPU904の一例は、1クロックサイクル中に最大32ビットを処理できる32ビットGPUである。レガシーAPU910の一例は、1クロックサイクル中に最大16ビットを処理して1つ以上のレガシーオーディオパラメータを生成できる16ビットAPUである。メモリデバイス906の一例は、2メガバイト(MB)RAMである。
レガシーCPU902、レガシーAPU910、及びレガシーGPU904は、CD-ROMドライブ908に結合されているメモリデバイス906に結合されている。エミュレートされたPUコード106は、メモリデバイス906内に格納されている。
レガシーCPU902、レガシーAPU910、またはレガシーGPU904は、メモリデバイス906からエミュレートされたPUコード106にアクセスし、エミュレートされたPUコード106を処理する。CD-ROMドライブ908は、更新された命令または破損したコードを含むCD-ROMを受け入れる。更新された命令または破損したコードは、レガシーCPU902によってCD-ROMからメモリデバイス906に転送され得る。
一実施形態では、レガシーマシン900はキャッシュを含まない。一実施形態では、レガシーマシン900は、4キロバイト(KB)のキャッシュなどの限られた容量のキャッシュを含む。
一実施形態では、レガシーマシン900は、現在、会社または企業などのエンティティによって製造されていないが、過去にエンティティによって製造された。
図9Bは、更新されたマシン920の実施形態を説明するための図である。更新されたマシン920は、CPU922、GPU924、APU931、メモリシステム926、及びキャッシュ102(図1)の一例であるキャッシュ928を含む。ゲームコンソール402(図4B)は、更新されたマシン920の一例である。一例として、CPU922は2つのクアッドコアモジュールを含み、各モジュールは、各クロックサイクル中に64ビットを処理することができる。各コアは、32キロバイト(KB)のキャッシュを有する。CPU922の別の例は、1クロックサイクル中に最大64ビットを処理できる64ビットCPUである。一例として、GPU924は1152コアを有し、各コアは1クロックサイクル中に64ビットを処理できる。別の例として、レガシーGPU924は、64ビットGPUであり、1クロックサイクル中に最大64ビットを処理できる。さらに別の例として、APU931は、16ビットAPUであり、1クロックサイクル中に最大16ビットを処理できる。さらに別の例として、APU931は、24ビットAPUであり、1クロックサイクル中に最大24ビットを処理できる。さらに別の例として、APU931は、32ビットAPUであり、1クロックサイクル中に最大32ビットを処理できる。
CPU922、GPU924、及びAPU931は、メモリシステム906に結合されている。一例として、エミュレートされたPUコード106は、レガシーメモリシステム906内に格納されている。メモリシステム926が含むものの一例は、500ギガバイト(GB)または2テラバイト(TB)のストレージを提供するハードドライブである。CPU922、GPU924、キャッシュ928、及びメモリシステム926は、バス930を介して互いに結合されている。
CPU922またはGPU924は、メモリシステム926にアクセスする前に、最初にキャッシュ928にアクセスする。キャッシュ928が、CPU922またはGPU924によって要求されたデータを含まないと判定すると、CPU922またはGPU924またはAPU931は、メモリシステム926にアクセスする。
一実施形態では、ゲームコードgcNは、CPU922またはGPU924またはAPU931によって実行されることはできないが、レガシーCPU902またはレガシーGPU904によって実行されることができることに留意されたい。また、基本ブロック1~nは、CPU922またはGPU924またはAPU930によって実行され得るが、レガシーCPU902またはレガシーGPU904またはレガシーAPU910によっては実行され得ない。
一実施形態では、キャッシュ928は、CPU922内に位置する。
一実施形態では、キャッシュ928は、GPU924内に位置する。
一実施形態では、キャッシュ928は、APU931内に位置する。
一実施形態では、キャッシュ928は、CPU922内に位置し、キャッシュ102などの別のキャッシュは、GPU924内に位置する。
一実施形態では、更新されたマシン920は、現在、エンティティによって製造されているか、またはエンティティによって最近製造された。例えば、更新されたマシン920は、レガシーマシン900の製造の数年後にエンティティによって製造されている。
図10Aは、基本ブロックコンパイラ104(図1)による複数の基本ブロックの1つの基本ブロックへの組み合わせを説明するためのシステム1000の実施形態の図である。ブロッククリエータ604(図6A)は、仮想オブジェクト454(図4B)が、ゲームタイトルGNを有するレガシーゲームNのレベル1において、位置P1及び方向O1で開始されることを示す信号などのユーザ入力1を受信する。ユーザ入力1を受信すると、基本ブロック1は、エミュレートされたPUコード命令1に基づいて基本ブロックコンパイラ104によって生成され、ユーザ入力1を処理する。同様に、ブロッククリエータ604は、仮想オブジェクト454がレガシーゲームNのレベル2で位置P1及び方向O1で開始されることを示す信号などのユーザ入力2を受信する。ユーザ入力2を受信すると、基本ブロック2は、エミュレートされたPUコード命令2に基づいて基本ブロックコンパイラ104によって生成され、ユーザ入力2を処理する。
仮想オブジェクト454がレガシーゲームNのレベル3で位置P1と方向O1で開始されることを示す信号などのユーザ入力3が受信されると、ブロックコンパイラ104は、基本ブロック1及び2をユーザ入力3の処理として識別する。そのように識別すると、ブロッククリエータ604は、基本ブロック1及び2を、基本ブロック1または基本ブロック2などの単一の基本ブロックに組み合わせるなどして統合する。この統合は、キャッシュ102内のメモリスペースを節約し、かつ、基本ブロック1及び基本ブロック2にアクセスする代わりに、単一の基本ブロックにアクセスする際の効率も高める。
ブロッククリエータ604はさらに、キャッシュ102のポインタに値を生成する。本明細書で使用されるポインタの例は、レジスタである。ポインタは、基本ブロック1または基本ブロック2を処理するためのユーザ入力が受信されたときに、単一の基本ブロックを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が基本ブロック1または2を実行するとき、ブロックディスパッチャ302は、ポインタにアクセスし、基本ブロック1または2の代わりに単一の基本ブロックを実行する。
図10Bは、基本ブロック1~nのうちの1つ以上の修正を説明するためのシステム1020の実施形態の図である。システム1020は、ブロックインターフェース1022、キャッシュ102、及びブロックディスパッチャ302を含む。一例として、基本ブロックnは、推測航法の操作nが含まれる。別の例として、基本ブロックnは、ディスプレイデバイス410(図4B)のディスプレイ画面の端から十字線を跳ね返す操作nを含む。ブロックインターフェース1022の例は、ASIC、またはPLD、またはマイクロプロセッサ、またはマイクロコントローラ、またはコンピュータプログラム、またはコンピュータプログラムの一部分である。ブロックインターフェース1022は、キャッシュ102に結合されている。
ブロックインターフェース1022は、キャッシュ102に格納された1つ以上の基本ブロック1~nへのアクセスをユーザに提供する。例えば、ユーザは、キーボード、マウス、またはキーパッドなどの入力デバイス上の1つ以上のボタンを選択して、修正入力1024を生成する。一例として、修正入力1024は、基本ブロックnを修正するためのソースコードの形式の1つ以上のユーザ命令を含む。説明すると、修正入力1024は、基本ブロックnから推測航法の操作nを除去するためのユーザ命令を含む。別の例として、修正入力1024は、十字線がディスプレイデバイス410のディスプレイ画面の端から滑り落ち、ディスプレイデバイス410のディスプレイ画面の反対側の端に表示されることを含むように操作nを変更する命令を含む。反対側のエッジは、十字線が滑り落ちる端と対角線上にある。
入力デバイスは、ブロックインターフェース1022に結合されている。修正入力1024は、入力デバイスからブロックインターフェース1022に送信されて、基本ブロックnを修正して、修正された基本ブロックnを出力する。一例として、修正された基本ブロックnは、推測航法の操作を含んでいない。別の例として、修正された基本ブロックnは、十字線を端から反対側の端にスライドさせる操作nを含む。さらに別の例として、修正された基本ブロックnは、操作nの実行のクロックサイクル数を計算し、その数を基本ブロックnに格納する操作を含む。説明すると、サイクル数は、基本ブロック1が格納されているキャッシュ102のメモリアドレスに格納されている。クロックサイクル数を計算する操作は、操作nを実行することに加えて、ブロックディスパッチャ302(図3)によって実行される。ブロックディスパッチャ302は、操作nの実行時にクロックサイクル数を計算し、その数を基本ブロックnに格納する。
ブロッククリエータ604はさらに、キャッシュ102内のポインタに値を生成し、ポインタは、基本ブロックnを処理するためのユーザ入力が受信されたときに、変更された基本ブロックnを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が基本ブロックnを実行するとき、ブロックディスパッチャ302はポインタにアクセスし、基本ブロックnの代わりに変更された基本ブロックnを実行する。
図10Cは、サブルーチンに基づいて作成された基本ブロックと、サブルーチンを呼び出すエミュレートされたPUコード命令に基づいて生成された基本ブロックとを組み合わせることを示すシステム1030の実施形態の図である。ブロッククリエータ604(図6A)は、仮想オブジェクト454の破壊になる仮想オブジェクト454(図4B)の位置及び/または方向の変化を示す信号などのユーザ入力1を受信する。ユーザ入力1を受信すると、基本ブロック1は、エミュレートされたPUコード命令1に基づいて基本ブロックコンパイラ104によって生成され、ユーザ入力1を処理する。エミュレートされたPUコード命令1は、サブルーチン1への関数呼び出しを含む。このように、ユーザ入力1を受信すると、基本ブロック2は、エミュレートされたPUコード命令2の一例であるサブルーチン1に基づいて、基本ブロックコンパイラ104によって生成される。一例として、基本ブロック2は、位置P1及び方向O1で仮想オブジェクト454を再生成する操作2を含む。
仮想オブジェクト454の破壊になる、仮想オブジェクト454(図4B)の位置及び/または方向の変化を示す信号などのユーザ入力2が受信されるとき、ブロックコンパイラ104は、ユーザ入力2を処理するものとして基本ブロック1及び2を識別する。そのように識別すると、ブロッククリエータ604は、基本ブロック1及び2を、基本ブロック1または基本ブロック2などの単一の基本ブロックに組み合わせるなどして統合する。例えば、ユーザ入力2を受信すると、仮想オブジェクト454の破壊及び仮想オブジェクト454の再生成がトリガーされる。基本ブロック1と2を組み合わせると、サブルーチン1はスキップされる。
ブロッククリエータ604はさらに値を生成し、その値をキャッシュ102内のポインタに格納する。この値は、基本ブロック1及び2を処理するためのユーザ入力が受信されたときに、単一の基本ブロックを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が、基本ブロック1及び2を実行するためであるときに、ブロックディスパッチャ302は、ポインタにアクセスし、基本ブロック1の代わりに単一の基本ブロックを実行する。
図10Dは、2つの基本ブロックの間への基本ブロックの挿入を示すシステム1040の実施形態の図である。システム1040は、ブロックインターフェース1022及びキャッシュ102を含む。基本ブロック1及び2がキャッシュ102に格納された後、修正入力1042が、入力デバイスを介してユーザから受信される。一例として、修正入力1042は、ソースコードを含む信号であり、ソースコードは、基本ブロック1.1を定義し、これは、キャッシュ102内のソースレジスタアドレス1.1、キャッシュ102内の宛先レジスタアドレス1.1、及びソースレジスタアドレス1.1内に格納され、または宛先レジスタアドレス1.1上に格納され、またはソースレジスタアドレスと宛先レジスタアドレス1.1の両方に格納されているデータに実行される操作1.1を含む。操作1.1の例には、ジャンプ、格納、ロード、分岐、及び算術操作が含まれる。
修正入力1042は、基本ブロック1.1の場所の指示、及び基本ブロック1.1と基本ブロック1または2との関連付けをさらに含む。例えば、修正入力1042は、基本ブロック1.1がキャッシュ102内の基本ブロック1と2の間に挿入されることを示す信号と、基本ブロック1.1が基本ブロック1及び/または2にリンクされることを示す信号と、を含む。説明すると、基本ブロック1.1は、基本ブロック2の無効なマーク2を受信するために、1つ以上のレジスタアドレスなどのキャッシュ102内の場所を含むために挿入される。別の説明として、基本ブロック1.1は、基本ブロック2の実行のサイクル数を受信するために、キャッシュ102内の1つ以上のレジスタアドレスなどの場所を含むために挿入される。この説明では、ブロックインターフェース1022は、修正入力1042を受信し、基本ブロック1.1が基本ブロック1と2の間に挿入される修正入力1042から識別し、基本ブロック1と2との間に基本ブロック1.1を挿入する。別の例として、ブロックインターフェース1022は、基本ブロック1.1が、ゲームタイトルGNを有するレガシーゲームNのレベルをロック解除するための操作を含むことを判定する。レベルは、基本ブロック1の操作で識別される第1のレベルと、基本ブロック2の操作で識別される第2のレベルとの間にある。第1レベルと第2レベルは、ゲームタイトルGNを有するレガシーゲームNにある。第1レベルと第2レベルの間に挿入されたレベルは、ゲームコードgcNの一部ではないが、レガシーゲームNの新しいレベルである。第1のレベルと第2のレベルとの間に挿入されるレベルの例は、仮想オブジェクト454がミサイルの代わりにレーザ銃を発射するレベルである。
さらに、ブロックインターフェース1022は、修正入力1042からポインタの値を識別し、その値をキャッシュ102に格納する。一例として、ポインタの値は、基本ブロック1.1の実行が、基本ブロック2の実行の直前に発生することを示す。ブロックディスパッチャ302が基本ブロック2を実行するとき、ブロックディスパッチャ302は、基本ブロック1.1を指すポインタ内の値を識別し、基本ブロック2を実行する直前に基本ブロック1.1を実行する。別の例として、ポインタの値は、基本ブロック1.1の実行が、基本ブロック2を実行する直後に発生することを示している。ブロックディスパッチャ302が基本ブロック2を実行した後、ブロックディスパッチャ302は、基本ブロック1.1を指すポインタ内の値を識別し、基本ブロック2を実行した直後に基本ブロック1.1を実行する。
図10Eは、基本ブロックの実行の順序での切り替えを示すシステム1050の実施形態の図である。システム1050は、キャッシュ102及びブロックインターフェース1022を含む。キャッシュ102は、キャッシュ102のポインタ内に値を含み、その値は、基本ブロック1の実行後に基本ブロック2が実行されることを示している。ユーザは、入力デバイスを使用して、基本ブロック1及び2の実行順序が切り替えられることを示す信号を含む修正入力1052を提供する。信号を受信すると、ブロックインターフェース1022は、キャッシュ102内のポインタの値を変更して、基本ブロック2を実行した後に基本ブロック1が実行されることを示す。
図11Aは、基本ブロックnに格納されたサイクル数の実際のカウントの使用を説明するための方法1100の実施形態のフローチャートである。方法1100は、基本ブロックnを実行する操作662を含む。方法1100の操作1102において、ブロックディスパッチャ302(図3)は、操作662において、基本ブロックnの実行のサイクル数をカウントして、第1のカウントを生成する。ブロックディスパッチャ302は、方法1100の操作1104において、基本ブロックnに第1のカウントを格納する。例えば、ブロックディスパッチャ302は、基本ブロックnに割り当てられた、キャッシュ102内のレジスタアドレスのうちの1つを有するレジスタに実数を書き込む。
方法1100の操作1106において、ブロッククリエータ604(図6A)は、同じ基本ブロックnが再度実行されるかどうかを判定する。例えば、ブロッククリエータ604は、同じ基本ブロックnを処理するためのユーザ入力が、クライアントデバイスから受信されるかどうかを判定する。ブロッククリエータ604は、ユーザ入力が受信されるまで、同じ基本ブロックnを処理するためのユーザ入力が受信されるかどうかを判定し続ける。
図11Bは、図11Aの方法1100のフローチャートの続きである。基本ブロックnを処理するためのユーザ入力が再び受信されたと判定すると、基本ブロックnは、ブロックディスパッチャ304によって再び実行される。方法1100の操作1108では、ブロックディスパッチャ304は、操作1106において、基本ブロックnの実行のサイクル数をカウントして、第2のカウントを計算する。
ブロックディスパッチャ304は、第2のカウントが、方法1100の操作1108における第1のカウントからの所定の制限内にあるかどうかを判定する。所定の制限は、キャッシュ102に格納される。第2のカウントが第1のカウントからの所定の制限内にないと判定したことに応答して、方法1100の操作1110において、ブロックディスパッチャ304は通知を生成する。例えば、ブロックディスパッチャ304がゲームコンソール402(図4A)内に位置するとき、ゲームコンソール402のGPU924(図9B)は、クライアントデバイスのディスプレイデバイス410(図4A)に通知の表現を表示し、サーバシステム404に通知するために、コンピュータネットワーク408を介してサーバシステム404に通知を送信する。別の例として、ブロックディスパッチャ304が、サーバシステム404(図4B)内に位置するとき、ブロックディスパッチャ304は通知を生成し、サーバシステム404のGPUは、サーバシステム404に結合されたディスプレイデバイス上に通知の表現を表示する。一方で、第2のカウントが、第1のカウントから所定の制限内にあると判定すると、方法1100の操作1112において、ブロックディスパッチャ304は通知をトリガーしない。
図12は、第1のクライアントデバイスから第2のクライアントデバイスへの基本ブロック1~nの転送を説明するためのシステム1200の実施形態の図である。システム1200は、ゲームコンソール402、コンピュータネットワーク408、サーバシステム404、ゲームコンソール1202、及びディスプレイデバイス1204を含む。ゲームコンソール1202は、ゲームコンソール402に類似している。例えば、ゲームコンソール402及び1202の両方は、更新されたマシンの例である。別の例として、ゲームコンソール1202はレガシーマシンではない。また、ディスプレイデバイス1204は、図4Aのディスプレイデバイス410に類似している。例えば、ディスプレイデバイス410は、HMDまたはテレビまたはスマートテレビまたはコンピュータモニタである。
ゲームコンソール402は、ネットワークインターフェースコントローラ1212を含む。ゲームコンソール1202は、エミュレーションプロセッサシステム1206、入力プロセッサシステム1207、キャッシュ1208、及びネットワークインターフェースコントローラ1210を含む。エミュレーションプロセッサシステム1206は、エミュレーションプロセッサシステム409と同じ構造及び同じ機能を有する。入力プロセッサシステム1207は、入力プロセッサシステム407(図4A)と同じ構造及び同じ機能を有する。また、キャッシュ1208は、キャッシュ102と同じ構造及び同じ機能を有する。エミュレーションプロセッサシステム1206、入力プロセッサシステム1207、キャッシュ1208、及びネットワークインターフェースコントローラ1210は、バス1218を介して互いに結合されている。
基本ブロック1~nがキャッシュ102に格納されると、エミュレーションプロセッサシステム409の基本ブロックコンパイラ104は、基本ブロック1~nをネットワークインターフェースコントローラ1212に送信する。ネットワークインターフェースコントローラ1212は、ネットワーク通信プロトコルを基本ブロック1~nに適用して、基本ブロック1~nを埋め込む1つ以上のパケットを生成し、コンピュータネットワーク408を介して1つ以上のパケットをサーバシステム404に送信する。1つ以上のパケットを受信すると、サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを1つ以上のパケットに適用して、ゲームタイトルGNを有するレガシーゲームNの基本ブロック1~nを抽出し、基本ブロック1~nをサーバシステム404の1つ以上のメモリデバイス内に格納する。
ユーザ2は、ハンドヘルドコントローラ1212を使用して、ハンドヘルドコントローラ1212上の1つ以上のボタンを選択して、サーバシステム404によってユーザ2に割り当てられたユーザアカウント2にログインする。ユーザ2は、ユーザID2及びパスワードがサーバシステム404によって認証されると、ユーザアカウント2にログインする。ユーザ2がユーザアカウント2にログインすると、ユーザ2は、ゲームタイトルG1、ゲームタイトルGa、ゲームタイトルG2、そしてそのように続いてゲームタイトルGNまで、などの複数のゲームタイトルにアクセスすることができる。
ユーザアカウント2にログインすると、ユーザ2は、ハンドヘルドコントローラ1212を使用して、ハンドヘルドコントローラ1212上の1つ以上のボタンを選択して、ユーザ入力1214を生成する。ユーザ入力1214は、ディスプレイデバイス1204上に表示されたタイトルGNを有するレガシーゲームNの選択時に生成される。ユーザ入力1214が生成されるとき、キャッシュ1208は、基本ブロック1~nを含まない。例えば、ユーザ入力1214を受信するとエミュレーションプロセッサシステム1206の基本ブロックコンパイラは、キャッシュ102をチェックして、キャッシュ102が、ユーザ入力1214を処理するためのゲームコードGCNの基本ブロック1~nのうちの1つ以上を含むかどうかを判定する。キャッシュ102が、ユーザ入力1214を処理するための基本ブロック1~nのうちの1つ以上を含まないと判定すると、エミュレーションプロセッサシステム1206は、基本ブロック1~nのうちの1つ以上に対する要求1220を生成し、ネットワークインターフェースコントローラ1210への要求1220を送信する。
要求1220を受信すると、ネットワークインターフェースコントローラ1210は、ネットワーク通信プロトコルを要求1220に適用することによって要求1220を埋め込む1つ以上のパケットを生成し、コンピュータネットワーク408を介してサーバシステム404に1つ以上のパケットを送信する。サーバシステム404のネットワークインターフェースコントローラは、1つ以上のパケットを受信し、ネットワーク通信プロトコルを適用して、1つ以上のパケットから要求1220を抽出する。サーバシステム404のプロセッサは、要求1220を分析して、基本ブロック1~nが要求されていることを識別する。
基本ブロック1~nが要求されたとの判定に応答して、サーバシステム404は、サーバシステム404の1つ以上のメモリデバイスに格納された基本ブロック1~nにアクセスして、基本ブロック1~nをサーバシステム404のネットワークインターフェースコントローラに提供する。サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを適用して、基本ブロック1~nを埋め込む1つ以上のパケットを生成して、コンピュータネットワーク408を介して1つ以上のパケットをゲームコンソール1202に送信する。
ゲームコンソール1202のネットワークインターフェースコントローラ1210は、基本ブロック1~nを有する1つ以上のパケットを受信し、ネットワーク通信プロトコルを適用して、1つ以上のパケットから基本ブロック1~nを抽出し、基本ブロック1~nをエミュレーションプロセッサシステム1206に送信する。エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、基本ブロック1~nをキャッシュ1208に格納する。
ゲームタイトルGNを有するゲームのプレイ中にハンドヘルドコントローラ1212からユーザ入力1224を受信すると、入力プロセッサシステム1270は、入力プロセッサシステム407が、ユーザ入力419をユーザ入力420に変換するのと同じ方法で、ユーザ入力1224をユーザ入力1225に変換する。ユーザ入力1225を受信すると、エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、ユーザ入力1225を処理するために、キャッシュ1208内の基本ブロック1~nのうちの1つ以上を識別する。エミュレーションプロセッサシステム1206のブロックディスパッチャは、ユーザ入力1225を処理するために、基本ブロック1~nのうちの1つ以上を実行する。このようにして、基本ブロック1~nがエミュレーションプロセッサシステム409によってコンパイルされると、基本ブロック1~nは、エミュレーションプロセッサシステム1206によってコンパイルされる必要はないが、エミュレーションプロセッサシステム1206によって、サーバシステム404からアクセスされることができる。
図13は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414から受信されたユーザ入力419のエミュレーションを説明するためのシステム1300の実施形態の図である。システム1300は、入力プロセッサシステム407、エミュレーションプロセッサシステム409、ハンドヘルドコントローラ414、及びハンドヘルドコントローラ1306を含む。
ハンドヘルドコントローラ1306は、レガシーハンドヘルドコントローラの一例である。一例として、ハンドヘルドコントローラ1306は、レガシーマシン900(図9A)と共に使用されることができるが、更新されたマシン920(図9B)と共に使用することはできない。説明すると、入力プロセッサシステム407は、入力プロセッサ1314を含み、これは、ハンドヘルドコントローラ1306によって生成され、ハンドヘルドコントローラ1306から受信されるユーザ入力を解釈することができない。さらに説明するために、入力プロセッサ1314は、64ビットまたは128ビットで表されるユーザ入力419を解釈することができるが、ハンドヘルドコントローラ1306から受信した32ビットを有するユーザ入力を解釈することはできない。別の例として、ハンドヘルドコントローラ1306は、レガシーコントローラの一例であり、ハンドヘルドコントローラ414は、更新されたコントローラの一例である。説明すると、ハンドヘルドコントローラ1306は、現在エンティティによって製造されておらず、ハンドヘルドコントローラ414は、現在エンティティによって製造されている。さらに説明するために、ハンドヘルドコントローラ414は最新バージョンであり、ハンドヘルドコントローラ1306は古いバージョンである。別のさらなる説明として、ハンドヘルドコントローラ1306は、ハンドヘルドコントローラ414がエンティティによって製造される数年前に、エンティティによって製造されている。さらに別の例として、ハンドヘルドコントローラ1306は、サムスティックを含まないが選択ボタンを含み、ハンドヘルドコントローラ414は選択ボタンを含まない。入力プロセッサ1314の例は、シリアル入力/出力(I/O)チップ内に一体化されたプロセッサである。
入力プロセッサシステム407は、入力エミュレータ1318、メモリデバイス1316、及び通信デバイス1320をさらに含む。メモリデバイス1316内には、デフォルトのマッピング1308が格納されている。デフォルトのマッピング1308は、ユーザアカウント1及び2に関連付けられていることに留意されたい。例えば、レガシーゲームNがユーザアカウント1を介してアクセスされるとき、メモリデバイス1316に格納され、ユーザアカウント1で使用するために選択された現在のマッピングがない限り、デフォルトのマッピング1308が入力エミュレータ1318によって適用される。
一例として、本明細書で説明する入力エミュレータは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせである。説明すると、入力エミュレータは、プロセッサ、またはPLD、またはASIC、またはコントローラである。さらに説明するために、入力エミュレータ1318は、更新されたマシン920内に実装されると、更新されたマシン920が、ハンドヘルドコントローラ414から受信したユーザ入力を受信して処理し、レガシーゲームNのプレイを容易にすることを可能にする。入力エミュレータ1318は、レガシーゲームNをプレイするためのハンドヘルドコントローラ414の使用を容易にする。通信デバイス1320の一例は、無線転送プロトコルまたは有線転送プロトコルなどの近距離通信プロトコルを適用する通信回路である。有線転送プロトコルの一例は、USBプロトコルであり、無線転送プロトコルの一例はBluetooth(登録商標)プロトコルである。通信デバイス1320は、入力エミュレータ1318に結合されている入力プロセッサ1314に結合されている。入力エミュレータ1318は、基本ブロックコンパイラ104に結合されている。入力プロセッサ1314と入力エミュレータ1318の両方は、メモリデバイス1316に結合されている。
また、ハンドヘルドコントローラ414は、有線接続または無線接続などの接続を介して入力プロセッサ1314に結合されている。有線接続の一例には、並列転送接続が含まれ、そこでは、情報は、ハンドヘルドコントローラ414から入力プロセッサ1314への同時並列方式での通信である。
ユーザ1は、ハンドヘルドコントローラ414上で1つ以上の入力デバイスを操作して、ゲームタイトルGNを選択し、ユーザ入力418を生成する(図4A)。ハンドヘルドコントローラ414の入力デバイスの例には、左サムスティック1302A、右サムスティック1302B、及び1つ以上のボタンが含まれる。説明すると、ゲームタイトルGNを選択するために、ハンドヘルドコントローラ414上のボタンが、押される、または押し下げられるなど、ユーザ1によって選択される。ユーザ入力418に基づいて、サーバシステム404は、ゲームコンソール402のメモリデバイス406(図4A)での格納のために、コンピュータネットワーク408を介してゲームコンソール402にゲームコードgcNを送信する。
レガシーゲームNのプレイ中、ハンドヘルドコントローラ414の1つ以上の入力デバイスは、ユーザ1によって操作され、対応する1つ以上の電気信号を生成し、これが最終的にユーザ入力419を形成する。例えば、ユーザ1が、ハンドヘルドコントローラ414のサムスティックを前方向または後方向または右方向または左方向に動かすと、電気信号が生成される。説明すると、順方向及び逆方向は、ハンドヘルドコントローラ414のxyz座標系のy軸に沿っており、右方向及び左方向は、xyz座標系のx軸に沿っている。この説明では、順方向は逆方向に反対であり、右方向は左方向に反対である。
ハンドヘルドコントローラ414は、ハンドヘルドコントローラ414の1つ以上の入力デバイスに結合された、1つ以上の磁力計、1つ以上の加速度計、1つ以上のポテンショメータ、及び1つ以上のジャイロスコープなどのモーションセンシティブハードウェアを含む。ハンドヘルドコントローラ414は、モーションセンシティブハードウェアに結合されたアナログ-デジタル変換器をさらに含む。ハンドヘルドコントローラ414は、アナログ-デジタル変換器に結合されたエンコーダなどのプロセッサと、プロセッサに結合された通信デバイスと、を含む。ハンドヘルドコントローラ414の1つ以上の入力デバイスがユーザ1によって操作されるとき、1つ以上のアナログモーションセンシティブ信号などの対応する電気信号は、モーションセンシティブハードウェアによって生成される。1つ以上のアナログモーションセンシティブ信号は、モーションセンシティブハードウェアからハンドヘルドコントローラ414のアナログ-デジタル変換器に送信される。ハンドヘルドコントローラ414のアナログ-デジタル変換器は、アナログモーションセンシティブ信号をアナログ形式からデジタル形式に変換して、デジタルモーションセンシティブ信号を出力する。デジタルモーションセンシティブ信号は、アナログ-デジタル変換器からハンドヘルドコントローラ414のプロセッサに送信される。
ハンドヘルドコントローラ414のプロセッサは、符号化プロトコルを適用して、デジタルモーションセンシティブ信号を符号化して、符号化された信号を出力する。例えば、第1のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414上のオプションボタンの選択を表すと判定すると、ハンドヘルドコントローラ414のプロセッサは、第1の周波数を使用して第1のデジタルモーションセンシティブ信号を符号化する。この例では、第2のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表すと判定することに応答して、ハンドヘルドコントローラ414のプロセッサは、第2のデジタルモーションセンシティブ信号を第1の周波数より大きい、またはより小さいなど、第1の周波数とは異なる第2の周波数を使用して第2のデジタルモーションセンシティブ信号を符号化する。また、この例では、第3のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表すと判定したことに応答して、ハンドヘルドコントローラ414のプロセッサは、第1及び第2の周波数とは異なる第3の周波数を使用して第3のデジタルモーションセンシティブ信号を符号化する。
ハンドヘルドコントローラ414のプロセッサは、符号化された信号をハンドヘルドコントローラ414の通信デバイスに送信する。ハンドヘルドコントローラ414の通信デバイスは、Bluetooth(登録商標)プロトコルなどの無線転送プロトコルを符号化された信号に適用して、ユーザ入力419の例である1つ以上のデータパケットを生成する。ハンドヘルドコントローラ414の通信デバイスは、無線接続を介して入力プロセッサシステム407の通信デバイス1320にユーザ入力419を送信する。
ユーザ入力419を受信すると、通信デバイス1320は、無線転送プロトコルを適用して、1つ以上のデータパケットから符号化された信号を抽出し、符号化された信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、符号化された信号を、復号化及び分析するなどして解析し、ハンドヘルドコントローラ414の操作に関連付けられた初期入力デバイス情報を判定する。例えば、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号に基づいて、ハンドヘルドコントローラ414の入力デバイスのどれが、ユーザ1によって操作されているか、入力デバイスの動きの量、及び動きの量の方向を識別する。説明すると、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計から受信した1つ以上のアナログモーションセンシティブ信号に基づいて生成された1つ以上のデジタルモーションセンシティブ信号から、ハンドヘルドコントローラ414上の特定のボタン(オプションボタンなど)がユーザ1によって選択されているかを判定する。さらに説明するために、第1のデジタルモーションセンシティブ信号が、第1の周波数を使用して符号化されていると判定すると、入力プロセッサ1314は、オプションボタンが選択されていると判定し、第2のデジタルモーションセンシティブ信号が、第2の周波数を使用して符号化されていると判定することに応答して、入力プロセッサ1314は、左サムスティック1302Aがユーザ1によって操作されていると判定する。
別の説明として、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計、ジャイロスコープ、及び磁力計から受信した1つ以上のアナログモーションセンシティブ信号に基づいて生成された1つ以上のデジタルモーションセンシティブ信号から、サムスティックが、前方、後方、右方、左方などの特定の方向に動かされたか、そして移動量が特定の方向で事前判定された閾値を超えているかを判定する。この説明では、特定の方向での動き、及び動きの量が、サムスティックの機能の例である。さらに説明するために、入力プロセッサ1314は、左サムスティック1302Aの移動量が所定の移動量を超えると判定して、移動量が所定の閾値を超えると判定する。所定の移動量は、メモリデバイス1316に記憶される。ハンドヘルドコントローラ414のボタンの機能の別の例は、ユーザ1によるボタンの選択(押す、または押し込むなど)である。この例では、ボタンの機能は、ボタンが、入力プロセッサ1314によってユーザ1によって操作されていると識別されたときに判定される。ハンドヘルドコントローラ414のボタンの機能の別の例として、入力プロセッサ1314は、ユーザ1がボタンを操作したときにデジタルモーションセンシティブ信号が生成される回数を判定する。この例では、回数は、デジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414から入力プロセッサ1314によって受信されると判定された回数に等しい。また、この例では、回数は、ボタンがユーザ1によって選択された回数と同じである。
入力プロセッサ1314は、初期入力デバイス情報を入力エミュレータ1318に送信する。レガシーゲームNのプレイ中に初期入力デバイス情報を受信すると、入力エミュレータ1318は、メモリデバイス1316内に記憶されたデフォルトマッピング1308にアクセスして、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の識別子1312に基づいてハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスを識別する。例えば、初期入力デバイス情報を受信すると、入力エミュレータ1318は、デフォルトマッピング1308から、ユーザ1によって操作されるハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の更新された入力デバイス識別子1312のうちの1つ以上に対応する1つ以上のレガシー入力デバイス識別子1310を判定する。デフォルトのマッピング1408は、ハンドヘルドコントローラ1306のレガシー入力デバイスのそれぞれと、ハンドヘルドコントローラ414の更新された入力デバイスの対応する1つとの間のリンクなどの1対1の対応を含む。
更新された入力デバイス識別子1312の例は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を識別する英数字及び記号またはビットなどの識別文字を含む。説明すると、更新された入力デバイス識別子1312は、左サムスティック1302Aの記号及び右サムスティック1302Bの記号を含む。別の例として、更新された入力デバイス識別子1312は、ハンドヘルドコントローラ414上のタッチパッド用の記号を含む。
レガシー入力デバイス識別子1310の例は、ハンドヘルドコントローラ1306のレガシー入力デバイスの1つ以上を識別する英数字及び記号またはビットなどの識別文字を含む。説明すると、更新された入力デバイス識別子1310には、ハンドヘルドコントローラ1306の左移動ボタン1304Aの記号、ハンドヘルドコントローラ1306の前方移動ボタン1304Bの記号、ハンドヘルドコントローラ1306の右移動ボタン1304Cの記号、及びハンドヘルドコントローラ1306の後方移動ボタン1304Dの記号が含まれる。別の説明として、レガシー入力デバイス識別子1310は、ハンドヘルドコントローラ1306の選択ボタンの記号を含む。
さらに、入力エミュレータ1318は、ユーザ1によって操作されるハンドヘルドコントローラ414の1つ以上の機能から、ハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスの1つ以上の機能を判定する。説明すると、入力エミュレータ1318は、所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。別の説明として、入力エミュレータ1318は、第1の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの2回の選択に対応すると判定する。この説明では、入力エミュレータ1318は、第2の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。第2の事前に判定された閾値は、第1の事前に判定された閾値よりも大きいか、または高くなっている。さらに別の説明として、ハンドヘルドコントローラ414の1つ以上の機能から判定される、ハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスの1つ以上の機能は、ハンドヘルドコントローラ414の1つ以上の機能によって実現されるような同じ結果を実現する。この説明では、ハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスの1つ以上の機能と、ハンドヘルドコントローラ414の1つ以上の機能は、仮想環境452内の仮想オブジェクトの同じ移動量になる。同じ移動量の例は、1つの位置から別の位置への動き、または1つの向きから別の向きへの動き、またはそれらの組み合わせである。
入力エミュレータ1318は、ユーザ1によって操作される1つ以上の更新された入力デバイス識別子1312に対応する1つ以上のレガシー入力デバイス識別子1310を有するユーザ入力420を生成する。また、ユーザ入力420は、1つ以上のレガシー入力デバイス識別子1310によって識別される1つ以上のレガシー入力デバイスの1つ以上の機能を含む。入力エミュレータ1318は、ユーザ入力420を基本ブロックコンパイラ104に送信する。
基本ブロックコンパイラ104は、ユーザ入力420に基づいて、ユーザ入力420を処理するための基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されているかどうかを判定する(図1)。例えば、基本ブロックコンパイラ104は、ユーザ入力420に基づいて、キャッシュ102に格納された基本ブロック1~nのうちの1つ以上が、レガシーゲームNのプレイ中に戦闘機を位置P1から位置P2に移動させるために実行され得るかを判定する。説明すると、基本ブロックコンパイラ104は、左移動ボタン1304Aの選択に基づいて、戦闘機が位置P1から位置P2に移動されることを判定する。基本ブロックコンパイラ104は、左移動ボタン1304Aの選択に従って、キャッシュ102に格納された基本ブロック1~nのうちの1つ以上の実行が、戦闘機の位置P1から位置P2への移動を可能にするかどうかをさらに判定する。
ユーザ入力420を処理するための基本ブロック1~nのうち1つ以上がキャッシュ102に格納されていると判定すると、基本ブロックコンパイラ104は、ブロックディスパッチャ302に命令を送信する(図3)。ブロックディスパッチャ302は、命令に応答して、ユーザ入力420を処理するために、キャッシュ102から基本ブロック1~nのうちの1つ以上を実行する。例えば、基本ブロック1~nのうちの1つ以上は、戦闘機を位置P1から位置P2に移動させるために実行される。さらに、戦闘機が位置P1から位置P2に移動する1つ以上の画像フレームを生成するために、基本ブロック1~nのうちの1つ以上が実行される。
一方で、ユーザ入力420を処理するための基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されていないとの判定に応答して、基本ブロックコンパイラ102は、ユーザ入力420を処理するためのエミュレートされたPUコード命令1~Mのうちの1つ以上を識別する。基本ブロックコンパイラ102は、エミュレートされたPUコード命令1~Mのうちの1つ以上をコンパイルして、基本ブロック1~nのうちの1つ以上を生成し、ユーザ入力420を処理し、基本ブロック1~nのうちの1つ以上を格納のためにキャッシュ102に提供する。また、基本ブロックコンパイラ102は、ブロックディスパッチャ302に命令を送信して、キャッシュ102内に最近格納された基本ブロック1~nのうちの1つ以上を実行する。基本ブロック1~nのうちの1つ以上は、次いで、ユーザ入力420を処理するために、ブロックディスパッチャ302によって実行される。
一実施形態では、ハンドヘルドコントローラ414は、レガシーマシン900(図9A)と互換性がない。例えば、レガシーマシン900の入力プロセッサシステムは、ハンドヘルドコントローラ1306によって生成され、そこから受信したユーザ入力を解釈することができる入力プロセッサを含む。レガシーシステム900の入力プロセッサシステムは、ハンドヘルドコントローラ414によって生成され、そこから受信したユーザ入力419を解釈することができない。さらに説明すると、レガシーシステム900の入力プロセッサは、ハンドヘルドコントローラ1306から受信され、32ビットで表されるユーザ入力を解釈することができるが、64ビットまたは128ビットで表されるユーザ入力419は、解釈することはできない。
一実施形態では、入力エミュレータ1318は、入力プロセッサ1314の一部分である。例えば、入力エミュレータ1318は、入力プロセッサ1314の制御ユニット及び算術論理ユニット(ALU)による実行のために、入力プロセッサ1314のキャッシュ内に格納されたコンピュータプログラムである。
一実施形態では、ハンドヘルドコントローラ414の通信デバイスは、ハンドヘルドコントローラ414のモーションセンシティブハードウェアに結合されている。通信デバイスは、有線転送プロトコルを適用して、有線接続の異なるチャネルを介して入力プロセッサシステム407の通信デバイスにデジタルモーションセンシティブ信号を送信する。例えば、ハンドヘルドコントローラ414上のボタンの動きを表す第1のデジタルモーションセンシティブ信号を受信すると、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第1の接続リンクまたは第1の導体などの第1のチャネルを介して、第1のデジタルモーションセンシティブ信号を転送する。この例では、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表す第2のデジタルモーションセンシティブ信号の受信に応答して、ハンドヘルドコントローラ414の通信デバイスは、第2の接続リンクまたは第2の導体などの有線接続の第2のチャネルを介して第2のデジタルモーションセンシティブ信号を転送する。また、この例では、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表す第3のデジタルモーションセンシティブ信号を受信することに応答して、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第3の接続リンクや第3のワイヤなどの第3のチャネルを介して第3のデジタルモーションセンシティブ信号を転送する。
実施形態を続けると、入力プロセッサシステム407の通信デバイスは、デジタルモーションセンシティブ信号を受信し、チャネル情報と共にデジタルモーションセンシティブ信号を入力プロセッサ1314に提供する。例えば、入力プロセッサ407の通信デバイスは、入力プロセッサ1314に、第1のデジタルモーションセンシティブ信号が第1のチャネルを介して受信され、第2のデジタルモーションセンシティブ信号が第2のチャネルを介して受信され、第3のデジタルモーションセンシティブ信号が第3のチャネルを介して受信されることを示す。入力プロセッサ1314は、チャネルに基づいて、ハンドヘルドコントローラ414の入力デバイスのどれがユーザ1によって操作されるかを識別する。
一実施形態では、ハンドヘルドコントローラ414は、それ自体が入力デバイスである。例えば、ハンドヘルドコントローラ414は、ユーザ1によって、順方向、逆方向、右方向、または左方向に動かされて、その方向に動く仮想オブジェクトを制御する。
図14A-1は、ユーザ1によるデフォルトマッピング1308から現在のマッピング1404への変更を説明するためのシステム1400の実施形態の図である。システム1400は、ハンドヘルドコントローラ414、入力プロセッサシステム407、NIC1212、コンピュータネットワーク408、及びサーバシステム404を含む。
サーバシステム404のメモリデバイス412は、ユーザアカウント1及び2に関する情報を格納する。例えば、メモリデバイス412は、ユーザアカウント1及び2、ならびにユーザアカウント1及び2へのログインを可能にするための検証情報を格納する。別の例として、メモリデバイス412は、レガシーゲームN及びゲームタイトルGaを有する現在のゲームのプレイ中に、ユーザ1によってユーザアカウント1内に蓄積されたポイント数を格納する。この例では、メモリデバイス412は、レガシーゲームN及びゲームタイトルGaを有する現在のゲームのプレイ中に、ユーザ2によってユーザアカウント2内に蓄積されたポイントの数を格納する。
ユーザ1は、ハンドヘルドコントローラ414の1つ以上の更新された入力デバイスを操作し、1つ以上の更新された入力デバイスが操作されると、1つ以上のデジタルモーションセンシティブ信号が、上に示したのと同様の方法で生成される。例えば、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、レガシーゲームNを一時停止する。この例では、レガシーゲームNが一時停止されると、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、デフォルトマッピング1308を現在のマッピング1414に変更する。別の例として、レガシーゲームNをプレイする前に、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、デフォルトのマッピング1308を現在のマッピング1414に変更する。
一例として、デフォルトマッピング1308は、コントローラ414の更新された入力デバイスの第1の第1の識別子を、コントローラ1306のレガシー入力デバイスの第1の第1の第1の識別子にマッピングする(図13)。また、一例として、デフォルトマッピング1308は、コントローラ414の更新された2つ目の入力デバイスの第2の識別子を、コントローラ1306の2つ目のレガシー入力デバイスの第2の識別子にマッピングする。
ハンドヘルドコントローラ414の通信デバイスは、1つ以上のデジタルモーションセンシティブ信号を埋め込む1つ以上のデータパケットを生成し、これは、デフォルトのマッピング1308が現在のマッピング1414に変更されることを示す。ハンドヘルドコントローラ414の通信デバイスは、無線転送プロトコルを適用して、1つ以上のデータパケットを生成する。デフォルトマッピング1308を現在のマッピング1414に変更するための1つ以上のデータパケットは、ユーザ入力1402としてハンドヘルドコントローラ414の通信デバイスから無線接続を介して通信デバイス1320へ送信される。
通信デバイス1320は、無線転送プロトコルを適用して、デフォルトのマッピング1308を1つ以上のパケットから現在のマッピング1414に変化させるために1つ以上のデジタルモーションセンシティブ信号を抽出する。通信デバイス1320は、デフォルトマッピング1308を変化させるための1つ以上のデジタルモーションセンシティブ信号を入力プロセッサ1314に送信する。1つ以上のデジタルモーションセンシティブ信号を受信すると、入力プロセッサ1314は、デフォルトのマッピング1308から現在のマッピング1404を生成するために判定する。例えば、コントローラ414の更新された入力デバイスのうちの1つ目の第1の識別子が、コントローラ1306のレガシー入力デバイスのうちの2つ目の第2の識別子にマッピングされたという指示を受信したことに応答して、入力プロセッサ1314は、第1の識別子を第2の識別子にリンクして、現在のマッピング1404を生成し、現在のマッピング1404を入力エミュレータ1318及びユーザアカウント1に関連付ける。別の例として、コントローラ414の更新された入力デバイスのうちの2つ目の第2の識別子が、コントローラ1306のレガシー入力デバイスのうちの1つ目の第1の識別子にマッピングされたという指示を受信したことに応答して、入力プロセッサ1314は、第2の識別子を第1の識別子にリンクして、現在のマッピング1404を生成し、現在のマッピング1404を入力エミュレータ1318に関連付ける。
さらに、現在のマッピング1404がユーザアカウント1を介して生成された後、入力プロセッサ1314は、現在のマッピング1404をメモリデバイス1316に格納し、現在のマッピング1404をユーザアカウント1に関連付ける。例えば、ユーザアカウント1にアクセスすると、ユーザ1は、デフォルトのマッピング1308に加えて、現在のマッピング1404にアクセスすることができる。説明すると、ユーザ1がユーザアカウント1にログインするとき、ゲームタイトルGNの選択を示すデジタルモーションセンシティブ信号を受信した後、入力プロセッサ1314は、ユーザ1が、デフォルトマッピング1308とレガシーゲームNをプレイするための現在のマッピング1404との間で選択する選択肢を提供する。別の例として、現在のマッピング1404の生成に応答して、入力プロセッサ1314は、入力エミュレータ1318に指示して、レガシーゲームNのプレイ中にハンドヘルドコントローラ414から受信した将来のユーザ入力をエミュレートする。この説明では、ユーザ1がユーザアカウント1にログインした後、将来のユーザ入力が入力プロセッサシステム407によって受信される。また、この説明では、将来のユーザ入力は、デフォルトのマッピング1308の代わりに、現在のマッピング1404に従ってエミュレートされている。さらに説明するために、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスの1つ以上を操作した後、ユーザアカウント1からログアウトして、デフォルトマッピング1308が現在のマッピング1404に変更されることを示す。さらなる説明では、ユーザ1は、ユーザアカウント1からログアウトした後、ユーザアカウント1にログインする。さらなる説明を続けると、ユーザs1がユーザアカウント1にログインした後、入力エミュレータ1318は、デフォルトマッピング1308の選択がハンドヘルドコントローラ414から受信されるまで、デフォルトマッピング1308の代わりに現在のマッピング1404を将来のユーザ入力に適用する。
図14A-2は、デフォルトマッピング1308及び現在のマッピング1404を説明するためのメモリデバイス1316の実施形態の図である。デフォルトマッピング1308は、ハンドヘルドコントローラ1306(図13)のレガシー入力デバイスのレガシー入力デバイス識別子1310を、レガシー入力デバイスの機能識別子、ハンドヘルドコントローラ414(図13)の更新された入力デバイスの更新された入力デバイス識別子1312、及び更新された入力デバイスの機能の識別子と共にマッピングする。例えば、デフォルトマッピング1308は、ハンドヘルドコントローラ1306のレガシー入力デバイスのレガシー入力デバイス識別子LID1、レガシー入力デバイスの機能LIF1、ハンドヘルドコントローラ1306の更新された入力デバイスの更新された入力デバイス識別子UID1、及び更新された入力デバイスの機能UIF1の間の1対1の対応を含む。別の例として、デフォルトマッピング1308は、ハンドヘルドコントローラ1306のレガシー入力デバイスのレガシー入力デバイス識別子LID2、レガシー入力デバイスの機能LIF2、ハンドヘルドコントローラ1306の更新された入力デバイスの更新された入力デバイス識別子UID2、及び更新された入力デバイスの機能UIF2の間の1対1の対応を含む。別の、さらなる別の例として、デフォルトマッピング1308は、ハンドヘルドコントローラ1306のレガシー入力デバイスのレガシー入力デバイス識別子LID5、レガシー入力デバイスの機能LIF5、ハンドヘルドコントローラ1306の更新された入力デバイスの更新された入力デバイス識別子UID5、及び更新された入力デバイスの機能UIF5の間の1対1の対応を含む。
同様に、現在のマッピング1404は、ハンドヘルドコントローラ1306のレガシー入力デバイスのレガシー入力デバイス識別子1310を、レガシー入力デバイスの機能の識別子、ハンドヘルドコントローラ414の更新された入力デバイスの更新された入力デバイス識別子、及び更新された入力デバイスの機能の識別子と共にマッピングする。例えば、現在のマッピング1404は、レガシー入力デバイス識別子LID1、機能LIF1、更新された入力デバイス識別子UID2、及び更新された入力デバイスの機能UIF2の間の1対1の対応を含む。別の例として、現在のマッピング1404は、レガシー入力デバイス識別子LID2、機能LIF2、更新された入力デバイス識別子UID1、及び機能UIF1の間の1対1の対応を含む。現在のマッピング1404では、デフォルトマッピング1308の識別子LID1とUID1との間のマッピングが、識別子LID1とUID2との間のマッピングを生成するため切り替えられることに留意されたい。また、現在のマッピング1404では、デフォルトマッピング1308の識別子LID2とUID2との間のマッピングが切り替えられて、識別子LID2とUID1との間のマッピングを生成する。
一実施形態では、複数のレガシー入力デバイス識別子が、1つ以上の更新された入力デバイス識別子にマッピングされる。例えば、左移動ボタン1304A及び右移動ボタン1304Cを識別する複数のレガシー入力デバイス識別子は、ハンドヘルドコントローラ414のサムスティック(左サムスティック1302Aまたは右サムスティック1302B(図13)など)の単一の更新された入力識別子にマッピングされる。別の例として、前方移動ボタン1304B及び後方移動ボタン1304Dを識別する複数のレガシー入力デバイス識別子が、ハンドヘルドコントローラ414のサムスティック(左サムスティック1302Aまたは右サムスティック1302Bなど)の単一の更新された入力識別子にマッピングされる。
一実施形態では、デフォルトマッピング1308は、ハンドヘルドコントローラ1306のレガシー入力デバイスの機能の識別子、及びハンドヘルドコントローラ414の更新された入力デバイスの機能の識別子を含まない。
一実施形態では、マッピングは、本明細書で説明されるように、更新されたハンドヘルドコントローラの同じ数の更新された入力デバイスに対する任意数の識別子を含む。また、マッピングには、レガシーハンドヘルドコントローラの同数のレガシー入力デバイスの任意数の識別子が含まれる。
図14Bは、レガシーゲームNのプレイ中にデフォルトマッピング1308(図13)の代わりに現在のマッピング1404を使用することを説明するためのシステム1450の実施形態の図である。ユーザ1は、ユーザアカウント1にログインし、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を介して現在のマッピング1404を選択する。ハンドヘルドコントローラ414から現在のマッピング1404の選択を示すユーザ入力を受信すると、入力プロセッサ1314は、デフォルトマッピング1308の代わりに現在のマッピング1404を適用するように入力エミュレータ1318に命令する。
レガシーゲームNのプレイ中、ハンドヘルドコントローラ414の1つ以上の入力デバイスは、ユーザ1によって操作され、対応する1つ以上の電気信号を生成し、これが最終的にユーザ入力1452を形成する。例えば、ユーザ1が、ハンドヘルドコントローラ414のサムスティックを前方向または後方向または右方向または左方向に動かすと、電気信号が生成される。
ハンドヘルドコントローラ414の1つ以上の入力デバイスがユーザ1によって操作されるとき、1つ以上の追加のアナログモーションセンシティブ信号などの対応する電気信号は、モーションセンシティブハードウェアによって生成される。1つ以上の追加のアナログモーションセンシティブ信号は、モーションセンシティブハードウェアからハンドヘルドコントローラ414のアナログ-デジタル変換器に送信される。ハンドヘルドコントローラ414の追加のアナログ-デジタル変換器は、アナログモーションセンシティブ信号をアナログ形式からデジタル形式に変換して、追加のデジタルモーションセンシティブ信号を出力する。追加のデジタルモーションセンシティブ信号は、アナログ-デジタル変換器からハンドヘルドコントローラ414のプロセッサに送信される。
ハンドヘルドコントローラ414のプロセッサは、符号化プロトコルを適用して、追加のデジタルモーションセンシティブ信号を符号化して、追加の符号化された信号を出力する。例えば、第1の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414上のオプションボタンの動作を表すと判定すると、ハンドヘルドコントローラ414のプロセッサは、第1の周波数を使用して第1の追加のデジタルモーションセンシティブ信号を符号化する。この例では、第2の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表すと判定することに応答して、ハンドヘルドコントローラ414のプロセッサは、第2の周波数を使用して第2の追加のデジタルモーションセンシティブ信号を符号化する。また、この例では、第3の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表すと判定したことに応答して、ハンドヘルドコントローラ414のプロセッサは、第3の周波数を使用して第3の追加のデジタルモーションセンシティブ信号を符号化する。
ハンドヘルドコントローラ414のプロセッサは、追加の符号化された信号をハンドヘルドコントローラ414の通信デバイスに送信する。ハンドヘルドコントローラ414の通信デバイスは、無線転送プロトコルを追加の符号化された信号に適用して、ユーザ入力1452の例である1つ以上の追加のデータパケットを生成する。ハンドヘルドコントローラ414の通信デバイスは、無線接続を介して入力プロセッサシステム407の通信デバイス1320にユーザ入力1452を送信する。
ユーザ入力1452を受信すると、通信デバイス1320は、近距離通信プロトコルを適用して、1つ以上のデータパケットから追加の符号化された信号を抽出し、追加の符号化された信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、追加の符号化された信号を、復号化及び分析するなど、解析して、ハンドヘルドコントローラ414の操作に関連付けられた追加の入力デバイス情報を判定する。例えば、入力プロセッサ1314は、1つ以上の追加のデジタルモーションセンシティブ信号に基づいて、ハンドヘルドコントローラ414の入力デバイスのどれが、ユーザ1によって操作されているか、入力デバイスの動きの量、及び動きの量の方向を識別する。説明すると、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計から出力された追加のアナログモーションセンシティブ信号から生成された1つ以上の追加のデジタルモーションセンシティブ信号から、ハンドヘルドコントローラ414上の特定のボタン(オプションボタンなど)がユーザ1によって選択されているかを判定する。さらに説明するために、第1の追加のデジタルモーションセンシティブ信号が、第1の周波数を使用して符号化されていると判定すると、入力プロセッサ1314は、オプションボタンが選択されていると判定し、第2の追加のデジタルモーションセンシティブ信号が、第2の周波数を使用して符号化されていると判定することに応答して、入力プロセッサ1314は、左サムスティック1302Aがユーザ1によって操作されていると判定する。
別の説明として、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計、ジャイロスコープ、及び磁力計から出力された追加のアナログモーションセンシティブ信号から生成された1つ以上の追加のデジタルモーションセンシティブ信号から、サムスティックが、前方、後方、右方、左方などの特定の方向に動かされたか、そして移動量が特定の方向で事前判定された閾値を超えているかを判定する。さらに説明するために、入力プロセッサ1314は、左サムスティック1302Aの移動量が所定の移動量を超えると判定して、移動量が所定の閾値を超えると判定する。この説明では、特定の方向での動き、及び動きの量が、サムスティックの機能の例である。ハンドヘルドコントローラ414のボタンの機能の別の例は、ユーザ1によるボタンの選択である。この例では、ボタンの機能は、ボタンが、入力プロセッサ1314によってユーザ1によって選択されていると識別されたときに判定される。ハンドヘルドコントローラ414のボタンの機能の別の例として、入力プロセッサ1314は、ユーザ1がボタンを操作したときに追加のデジタルモーションセンシティブ信号が生成される回数を判定する。回数は、追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414から入力プロセッサ1314によって受信されると判定された回数に等しい。また、この回数は、ボタンがユーザ1によって選択された回数と同じである。
レガシーゲームNのプレイ中に追加の入力デバイス情報を受信すると、入力エミュレータ1318は、メモリデバイス1316内に格納された現在のマッピング1404にアクセスして、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の識別子1312に基づいてハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスを識別する。例えば、追加の入力デバイス情報を受信すると、入力エミュレータ1318は、現在のマッピング1404から、ユーザ1によって操作されるハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の更新された入力デバイス識別子1312のうちの1つ以上に対応する1つ以上のレガシー入力デバイス識別子1310を判定する。
さらに、入力エミュレータ1318は、追加の入力デバイス情報を生成するためにユーザ1によって操作されるハンドヘルドコントローラ414の1つ以上の機能から、ハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスの1つ以上の機能を判定する。説明すると、入力エミュレータ1318は、所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。別の説明として、入力エミュレータ1318は、第1の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの2回の選択に対応すると判定する。この説明では、入力エミュレータ1318は、第2の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。
入力エミュレータ1318は、ユーザ1によって操作されたハンドヘルドコントローラ414の1つ以上の更新された入力デバイスの1つ以上の更新された入力デバイス識別子1312に対応する1つ以上のレガシー入力デバイス識別子1310を有するユーザ入力1454を生成する。また、ユーザ入力1454は、1つ以上のレガシー入力デバイス識別子1310によって識別される1つ以上のレガシー入力デバイスの1つ以上の機能を含む。入力エミュレータ1318は、ユーザ入力1454を基本ブロックコンパイラ104に送信する。
基本ブロックコンパイラ104は、ユーザ入力1454に基づいて、ユーザ入力1454を処理するための基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されているかどうかを判定する(図1)。例えば、基本ブロックコンパイラ104は、ユーザ入力1454に基づいて、レガシーゲームNのプレイ中に戦闘機を位置P1から位置P2に移動させるための基本ブロック1~nのうちの1つ以上が、キャッシュ102に格納されていることを判定する。説明すると、基本ブロックコンパイラ104は、左移動ボタン1304Aの選択に基づいて、戦闘機が第1の位置から第2の位置に、または第1の方向から第2の方向に、またはそれらの組み合わせで動かされることを判定する。基本ブロックコンパイラ104は、左移動ボタン1304Aの選択に従って、キャッシュ102に格納された基本ブロック1~nのうちの1つ以上の実行が、戦闘機の第1の位置から第2の位置への移動、または第1の方向から第2の方向への移動、またはこれらの組み合わせを可能にするかどうかをさらに判定する。
ユーザ入力1454を処理するための基本ブロック1~nのうち1つ以上がキャッシュ102に格納されていると判定すると、基本ブロックコンパイラ104は、ブロックディスパッチャ302に命令を送信する(図3)。ブロックディスパッチャ302は、命令に応答して、ユーザ入力1454を処理するために、キャッシュ102から基本ブロック1~nのうちの1つ以上を実行する。例えば、基本ブロック1~nのうちの1つ以上は、戦闘機を第1の位置から第2の位置に移動するため、または第1の方向から第2の方向に移動するため、またはそれらの組み合わせのために実行される。さらに、基本ブロック1~nのうちの1つ以上は、戦闘機が第1の位置から第2の位置に移動する、または第1の方向から第2の方向に移動する、またはその組み合わせである、1つ以上の画像フレームを生成するために実行される。
一方で、ユーザ入力1454を処理するための基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されていないとの判定に応答して、基本ブロックコンパイラ102は、ユーザ入力1454を処理するためのエミュレートされたPUコード命令1~Mのうちの1つ以上を識別する。基本ブロックコンパイラ102は、エミュレートされたPUコード命令1~Mのうちの1つ以上をコンパイルして、ユーザ入力1454を処理するための基本ブロック1~nのうちの1つ以上を生成し、基本ブロックの1つ以上を格納のためにキャッシュ102に提供する。また、基本ブロックコンパイラ102は、ブロックディスパッチャ302に命令を送信して、キャッシュ102内に最近格納された基本ブロック1~nのうちの1つ以上を実行する。
一実施形態では、ハンドヘルドコントローラ414の通信デバイスは、ハンドヘルドコントローラ414のモーションセンシティブハードウェアに結合されている。通信デバイスは、有線転送プロトコルを適用して、有線転送媒介の異なるチャネルを介して入力プロセッサシステム407の通信デバイスに追加のデジタルモーションセンシティブ信号を送信する。例えば、ハンドヘルドコントローラ414上のボタンの動きを表す第1の追加のデジタルモーションセンシティブ信号を受信すると、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第1のチャネルを介して、第1の追加のデジタルモーションセンシティブ信号を転送する。この例では、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表す第2の追加のデジタルモーションセンシティブ信号の受信に応答して、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第2のチャネルを介して第2の追加のデジタルモーションセンシティブ信号を転送する。また、この例では、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表す第3の追加のデジタルモーションセンシティブ信号を受信することに応答して、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第3のチャネルを介して第3の追加のデジタルモーションセンシティブ信号を転送する。
実施形態を続けると、入力プロセッサシステム407の通信デバイスは、追加のデジタルモーションセンシティブ信号を受信し、チャネル情報と共に追加のデジタルモーションセンシティブ信号を入力プロセッサ1314に提供する。例えば、入力プロセッサ407の通信デバイスは、入力プロセッサ1314に、第1の追加のデジタルモーションセンシティブ信号が第1のチャネルを介して受信され、第2の追加のデジタルモーションセンシティブ信号が第2のチャネルを介して受信され、第3の追加のデジタルモーションセンシティブ信号が第3のチャネルを介して受信されることを示す。入力プロセッサ1314は、チャネルに基づいて、ハンドヘルドコントローラ414の入力デバイスのどれがユーザ1によって操作されるかを識別する。
図15は、右サムスティック1302Bの動きに基づいた右移動ボタン1302Cの識別を説明するためのシステム1500の実施形態の図である。システム1500は、ハンドヘルドコントローラ414、ハンドヘルドコントローラ1306、入力プロセッサシステム407、及びエミュレーションプロセッサシステム409を含む。
ハンドヘルドコントローラ1306は、方向パッド(Dpad)1510及びパッド1512を含む。方向パッド1510上に、ボタン1302A~1302Bが配置されている。また、パッド1512上には、四角ボタン、三角ボタン、丸ボタン、及びXボタンが配置されている。さらに、ハンドヘルドコントローラ1306は、左ショルダーボタン1506及び右ショルダーボタン1508を含む。
ユーザ1は、右サムスティック1302を右方向1502に動かす。右サムスティック1302Bの拡大図に示されるように、ユーザが右サムスティックを右方向1502に動かすと、モーメントは所定の閾値1504を超える。所定の閾値1504は、右サムスティック1302Bの中心を通過する垂直軸である中心軸1516から測定される。例えば、中心軸1516は、右サムスティック1302Bの重心を通過する。説明すると、中心軸1516と所定の閾値1504との間に所定の水平距離がある。一例として、所定の閾値1504は垂直軸である。
ハンドヘルドコントローラ414は、右サムスティック1302が右方向1502に移動して所定の閾値1504を超えると、1つ以上のデジタルモーションセンシティブ信号を含むユーザ入力1514を生成する。1つ以上のデジタルモーションセンシティブ信号は、右サムスティック1302Bが右方向1502に移動し、所定の閾値1504を超えることを示す。ユーザ入力1514は、ユーザ入力419の例である(図13)。ユーザ入力1514は、ハンドヘルドコントローラ414から入力プロセッサシステム407に送られる。
入力プロセッサ1314は、ユーザ入力1514内に埋め込まれた1つ以上のデジタルモーションセンシティブ信号を受信し、周波数チャネルに基づいて、1つ以上のデジタルモーションセンシティブ信号が、右サムスティック1302Bがユーザ1によって動かされたことを識別すると判定する。周波数チャネルは、ハンドヘルドコントローラ414から入力プロセッサシステム407にユーザ入力1514内に埋め込まれた1つ以上のデジタルモーションセンシティブ信号を無線で転送するために使用される。第1の周波数を有するチャネルまたは第2の周波数を有するチャネルなどの周波数チャネルの識別子に基づいて、1つ以上のデジタルモーションセンシティブ信号は、右サムスティック1302Bの動きがあることを識別する。例えば、1つ以上のデジタルモーションセンシティブ信号が、第1の周波数でチャネルを介して転送されるとき、入力プロセッサ1314は、右サムスティック1302Bが動かされたと判定し、1つ以上のデジタルモーションセンシティブ信号が第2の周波数でチャネルを介して転送されるとき、入力プロセッサ1314は、左サムスティック1302Aが動かされたと判定する。この例では、第2の周波数は、第1の周波数よりも大きい、または小さい。
さらに、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号によって示される方向性に基づいて、右サムスティック1302Bが右方向1502に動かされたことをさらに判定する。例えば、1つ以上のデジタルモーションセンシティブ信号は、ハンドヘルドコントローラ414のジャイロスコープによって生成された1つ以上のアナログモーションセンシティブ信号に基づいて出力され、ジャイロスコープは、右サムスティック1302Bの動きの方向性を測定する。
また、入力プロセッサ1314は、ハンドヘルドコントローラ414のポテンショメータによって生成された1つ以上のアナログモーションセンシティブ信号に基づいて出力された1つ以上のデジタルモーションセンシティブ信号に基づいて、右サムスティック1302Bの右方向1502での移動量を判定する。入力プロセッサ1314はさらに、右サムスティック1302Bの移動量が、メモリデバイス1316に格納されている所定の閾値1504を超えると判定する。
右サムスティック1302Bの動き、右方向1502の動き、及び右方向1502の動きが、所定の閾値1504を超えることは、初期入力デバイス情報または追加の入力デバイス情報などの入力デバイス情報の例である。入力プロセッサ1314は、入力デバイス情報を入力エミュレータ1318に提供する。入力エミュレータ1318は、入力デバイス情報を受信し、入力デバイス情報に基づいて、デフォルトのマッピング1308(図14A-2)または現在のマッピング1404(図14A-2)などのマッピング1530にアクセスする。例えば、右サムスティック1302Bが右方向1502に動かされたという指示を受信すると、入力エミュレータ1318は、デフォルトマッピング1308から、右サムスティック1302Bの動きが右移動ボタン1302Cの選択に対応することを識別する。さらに、入力エミュレータ1318は、デフォルトのマッピング1308から、右サムスティック1302Bの移動量が、右移動ボタン1302Cの選択の所定の回数(2回、3回、または4回など)に対応することを判定する。
入力エミュレータ1318は、右移動ボタン1302Cの操作を示す情報を含むユーザ入力1520を生成する。この情報は、右移動ボタン1302Cの選択と、右移動ボタン1302Cが選択される所定の回数を示す。右移動ボタン1302Cは、実際にはユーザ1によって選択されないことに留意されたい。むしろ、右サムスティック1302Bの動きは、右移動ボタン1302Cの選択としてエミュレートされる。ユーザ入力1520は、ユーザ入力420の例である(図13)。入力エミュレータ1318は、ユーザ入力1520を基本ブロックコンパイラ104に提供し、これは、図13を参照して上に示した方法で操作する。
図15を参照して上で説明された実施形態は、右サムスティック1302Bを右方向1502に動かすためのものであることに留意されたい。一実施形態では、右サムスティック1302Bの代わりに、左サムスティック1302Aが、右方向、左方向、前方向、または後方向に動かされ、その動きに基づいて、ユーザ入力がハンドヘルドコントローラ414によって生成される。一実施形態では、右方向1502への移動の代わりに、右、前方、後方、またはそれらの組み合わせなどの他の任意の方向への移動が発生する。
一実施形態では、ハンドヘルドコントローラ414の代わりに、ホイールコントローラが使用される。ホイールコントローラはドライビングホイールの形をしている。一例として、ホイールコントローラは、左サムスティック1302A及び右サムスティック1302Bを含まない。代わりに、ドライビングホイールは、ユーザ1によって操作されて、レガシーゲームNの仮想オブジェクトを左方向、右方向、前方向、及び後方向に動かす。ドライビングホイールは、時計回りまたは反時計回りに回転されることができる。ドライビングホイールがユーザ1によって時計回りに回転されると、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号に基づいて、ドライビングホイールが回転されたこと、及びドライビングホイールが、反時計回りの方向又は時計回りの方向に回転されたかどうかを判定する。入力プロセッサ1314はさらに、回転量が事前設定された閾値を超えるかどうかを判定する。入力プロセッサ1314は、ドライビングホイールの識別子、回転方向、及び回転量が事前設定された閾値を超えるかどうかの指示などの情報を入力エミュレータ1318に提供する。入力エミュレータ1318は、デフォルトマッピングまたは現在のマッピングなどのマッピングにアクセスして、ハンドヘルドコントローラ1306の対応するボタン、及び対応するボタンの操作を識別し、ユーザ入力を生成する。例えば、入力エミュレータ1318は、情報、及びマッピングに基づいて、ハンドヘルドコントローラ1306の対応するボタンが選択されたこと、及び対応するボタンがユーザ入力を生成するために選択された回数を識別する。入力エミュレータ1318は、ユーザ入力を図13または14Bを参照して上に示した方法で操作する基本ブロックコンパイラ104に提供する。
図16Aは、タッチパッド1602がユーザ1によって選択されたときの十字線の仮想画像の生成を説明するためのシステム1600の実施形態の図である。タッチパッド1602は、ボタンの一例である。システム1600は、入力プロセッサシステム407、ハンドヘルドコントローラ414、及びエミュレーションプロセッサシステム409を含む。ハンドヘルドコントローラ414は、タッチパッド1602、方向パッド1604、パッド1606、左サムスティック1302A、及び右サムスティック1302Bを含む。
レガシーゲームNのプレイ中に、ユーザ1は、自身の指を使用して、タッチパッド1602を選択する。タッチパッド1602は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つの例である。ハンドヘルドコントローラ414のモーションセンシティブハードウェアは、タッチパッド1602の選択に応答して、1つ以上のアナログモーションセンシティブ信号を生成する。例えば、1つ以上のアナログモーションセンシティブ信号は、タッチパッド1602の選択、及びタッチパッド1602の基準座標系に対するタッチパッド1602の選択場所を示す。説明すると、x軸に沿った選択の場所に基づいて、ハンドヘルドコントローラ414の第1のポテンショメータは、第1の電気信号を生成し、y軸に沿った選択の場所に基づいて、ハンドヘルドコントローラ414の第2のポテンショメータは、第2の電気信号を生成する。タッチパッド1602に関連するx軸及びy軸は、以下でさらに説明されている。1つ以上のアナログモーションセンシティブ信号は、ハンドヘルドコントローラ414のアナログ-デジタル変換器によって、1つ以上のデジタルモーションセンシティブ信号に変換される。ハンドヘルドコントローラ414のプロセッサは、符号化プロトコルを1つ以上のデジタルモーションセンシティブ信号に適用して、1つ以上の符号化信号を出力する。例えば、1つ以上の符号化信号は、固有の関係を有するような、タッチパッド1602に対応する周波数を有する。ハンドヘルドコントローラ414の通信デバイスは、無線転送プロトコルを適用して、1つ以上の符号化信号を1つ以上のデータパケットに埋め込み、無線接続を介して通信デバイス1320に1つ以上のデータパケットを送信する。1つ以上のデータパケットが、ユーザ入力1612として図16Aに示されている。通信デバイス1320は、無線転送プロトコルを、ハンドヘルドコントローラ414から受信した1つ以上のデータパケットに適用して、符号化された信号を取得し、符号化された信号を入力プロセッサ1314に送信する。
入力プロセッサ1314は、図13を参照して説明したのと同様の方法で、タッチパッド1602がユーザ1によって選択されたことを判定または識別する。例えば、1つ以上の符号化された信号内に符号化された1つ以上のデジタルモーションセンシティブ信号が、所定の周波数チャネルに一致するハンドヘルドコントローラ414からの周波数で受信されると判定することに応答して、入力プロセッサ1314は、タッチパッド1602が選択されたと判定する。
この例では、所定の周波数チャネルは、メモリデバイス1316内に格納されている。また、この例では、入力プロセッサ1314は、符号化された信号にフーリエ変換を適用することによって周波数を判定する。
入力プロセッサ1314はさらに、タッチパッド1602の基準座標系に関して、ユーザ1によるタッチパッド1602上の選択場所を判定する。例えば、入力プロセッサ1314は、ハンドヘルドコントローラ414の第1のポテンショメータから受信した電圧量に基づいて、タッチパッド1602が、タッチパッド1602の基準座標系に関して座標(x1,0)においてユーザ1によって選択されていると判定する。さらに、この例では、入力プロセッサ1314は、ハンドヘルドコントローラ414の第2のポテンショメータから受信した電圧量に基づいて、タッチパッド1602が、タッチパッド1602の基準座標系に関して座標(0,y1)において、ユーザ1によって選択されていると判定する。この例では、第1及び第2の電圧量が、1つ以上の符号化された信号内で受信される。説明すると、ハンドヘルドコントローラ414のモーションセンシティブハードウェアから出力される1つ以上のアナログモーションセンシティブ信号は、第1及び第2の電圧量を表す情報を含む。選択されたタッチパッド1602の識別子及びユーザ1によるタッチパッド1602上の選択場所は、初期入力デバイス情報及び追加の入力デバイス情報などの入力デバイス情報の例である。
入力プロセッサ1318は、選択されたタッチパッド1602の識別子及びタッチパッド1602上の選択場所を入力エミュレータ1318に提供する。入力エミュレータ1318は、マッピング1610にアクセスして、選択されたタッチパッド1602の識別子に基づいて、ハンドヘルドコントローラ1306上の対応するボタンを識別する。例えば、入力エミュレータ1318は、マッピング1610から、ハンドヘルドコントローラ1306上の選択ボタンが、タッチパッド1602と固有の関係を有することを判定する。マッピング1610は、デフォルトのマッピング1308(図13)または現在のマッピング1404(図14A-2)の一例である。
また、入力エミュレータ1318は、ブロックディスパッチャ302に要求を送信して、レガシーゲームNの仮想シーンを有する画像フレームのサイズを取得する。一例として、サイズが要求されるレガシーゲームNの画像フレームは、ユーザ入力1612に基づいてユーザ入力1614が生成された後に生成される。説明すると、サイズが要求されるレガシーゲームNの第1の画像フレームは、ユーザ入力1614に基づいて生成され、第1の画像フレームが生成される前に、ユーザ入力1614に基づいて他の画像フレームは生成されない。ブロックディスパッチャ302は、画像フレームのサイズを入力エミュレータ1318に提供する。例えば、ブロックディスパッチャ302は、ユーザ入力1614に基づいて生成される画像フレームの直前に生成された先行する画像フレームと同じになるように画像フレームのサイズを提供する。説明すると、ユーザ入力1614に基づいて生成される画像フレームの生成と前の画像フレームとの間に、ブロックディスパッチャ302によって生成される他の画像フレームはない。入力エミュレータ1318は、ブロックディスパッチャ302に結合されている。
入力エミュレータ1318は、ユーザ入力1614に基づいて生成される画像フレーム内の十字線の仮想画像の場所を判定する。画像フレーム内の十字線の仮想画像の場所は、タッチパッド1602上の選択場所に対応する。画像フレーム内の十字線の仮想画像の場所が、タッチパッド1602上の選択場所と1対1の関係を有する方法の説明が、図16Bを参照して説明されている。
入力エミュレータ1318は、ハンドヘルドコントローラ1306上の選択ボタンの指示と、ユーザ入力1614に基づいて生成される画像フレーム内の十字線の仮想画像の場所と、を有するユーザ入力1614を生成する。ユーザ入力1614は、入力エミュレータ1318からブロックコンパイラ104に提供される。
ユーザ入力1614を受信すると、ブロックコンパイラ104は、ユーザ入力1614を処理するための基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されているかどうかを判定する(図1)。基本ブロック1~nのうちの1つ以上がキャッシュ102に格納されていると判定したことに応答して、ブロックディスパッチャ302(図3)は、1つ以上の基本ブロック1~nを実行して、ユーザ入力1614を処理するための1つ以上の画像フレームを生成する。例えば、ブロックディスパッチャ302(図3)は、ブロックコンパイラ104から生成される画像フレーム内の十字線の仮想画像の場所を受信し、画像フレーム内の仮想オブジェクトとしての十字線を生成するために、1つ以上の基本ブロック1~nを実行する。さらに、十字線は、ユーザ1によるタッチパッド1602の選択場所に対応する場所で画像フレーム内に生成される。
一実施形態では、入力エミュレータ1318は、ブロックディスパッチャ302が画像フレーム内の十字線の仮想画像の位置を判定するためのコマンドを生成し、コマンドをブロックディスパッチャ302に送信する。例えば、コマンドは、ブロックディスパッチャ302によって生成される画像フレームが、ユーザ1によるタッチパッド1602上の選択場所に比例する場所において、十字線の仮想画像を含むものであることをブロックディスパッチャ302に示す。コマンドは、ユーザ1によるタッチパッド1602上の選択場所を含む。入力エミュレータ1318は、ブロックディスパッチャ302に結合されている。この実施形態では、ユーザ入力1614は、画像フレーム内の十字線の仮想画像の場所を含まない。ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、画像フレームを生成する。さらに、ブロックディスパッチャ302は、図16Bを参照してなど、本明細書で説明するのと同じ方法で、画像フレーム内の十字線の仮想画像の場所を判定し、そこでは、入力エミュレータ1318が、ユーザ1によるタッチパッド1602上の選択場所に基づいて、画像フレーム内の十字線の仮想画像の位置を判定する。
図16Bは、システム1650の実施形態の図であり、ユーザ1によるタッチパッド1062上の選択場所と、仮想環境452を有する画像フレーム1654上の十字線1652の場所との間の対応を示す。この対応は、入力エミュレータ1318によって判定される(図16A)。画像フレーム1654は、ディスプレイデバイス410のディスプレイ画面に表示される(図4B)。システム1650は、タッチパッド1602及び画像フレーム1654を含む。
タッチパッド1602は、上部エッジ1666A、右エッジ1666B、下部エッジ1666C、及び左エッジ1666Dを有する。上部エッジ1666Aは、右エッジ及び左エッジに隣接し、接続している。また、下部エッジ1666Cは、右エッジ及び左エッジに隣接し、接続している。下部エッジ1666Cは、上部エッジ1666Aに面し、右エッジ1666Bは、左エッジ1666Dに面している。
タッチパッド1602上の選択場所は、座標(x1,y1)である。タッチパッド1602は、タッチパッド1602の隅に原点(0,0)を有する基準座標系に関連付けられている。タッチパッド1602は、長方形の4つの頂点などの4つの隅を有する。一例として、タッチパッド1602は、頂点を有する長方形である。タッチパッド1602の基準座標系のx軸は、タッチパッド1602の下部エッジ1666Cに沿っており、基準座標系のy軸は、タッチパッド1602の左エッジ1666Dに沿っている。座標x1は、原点(0、0)からx軸に沿った距離であり、座標y1は、原点(0、0)からy軸に沿った距離である。基準座標系のx軸は、基準座標系のy軸に垂直である。
同様に、画像フレーム1654は、上部エッジ1668A、右エッジ1668B、下部エッジ1668C、及び左エッジ1668Dを有する。上部エッジ1668Aは、右エッジ及び左エッジに隣接し、接続している。また、下部エッジ1668Cは、画像フレーム1654の右エッジ及び左エッジに隣接し、接続している。下部エッジ1668Cは上部エッジ1668Aに面し、右エッジ1668Bは左エッジ1668Dに面している。
十字線1652の場所は、座標(X1,Y1)にある。画像フレーム1654は、画像フレーム1654の隅に原点(0,0)を有する基準座標系に関連付けられている。画像フレーム1654は、長方形の4つの頂点などの4つの角を有する。一例として、画像フレーム1654は、頂点を有する長方形の画像フレームである。画像フレーム1654の基準座標系のX軸は、下部エッジ1668Cに沿っており、画像フレーム1654の基準座標系のY軸は左エッジ1668Dに沿っている。座標X1は、画像フレーム1654の隅にある原点(0,0)からのX軸に沿った距離であり、座標Y1は、原点(0,0)からのY軸に沿った距離である。
入力エミュレータ1318は、画像フレーム1654の基準座標系のX軸に沿った距離が、タッチパッド1602の基準座標系のx軸に沿った距離に比例していることを判定する。例えば、入力エミュレータ1318は、画像フレーム1654の幅がタッチパッド1602の幅のP倍であると判定し、ここで、Pはゼロより大きい整数である。画像フレーム1654の幅は、画像フレーム1654の基準座標系のX軸に沿って測定され、タッチパッド1602の幅は、タッチパッド1602の基準座標系のx軸に沿って測定される。この例では、入力エミュレータ1318は、画像フレーム1654の高さがタッチパッド1602の高さのQ倍であると判定し、ここで、Qはゼロより大きい整数である。画像フレーム1654の高さは、画像フレーム1654の基準座標系のY軸に沿って測定され、タッチパッド1602の高さは、タッチパッド1602の基準座標系のy軸に沿って測定される。この例では、入力エミュレータ1318は、X軸に沿った距離が、タッチパッド1602の基準座標系のx軸に沿った距離のP倍であると判定する。また、この例では、入力エミュレータ1318は、Y軸に沿った距離が、タッチパッド1602の基準座標系のx軸に沿った距離のQ倍であると判定する。
図17は、システム1700の実施形態の図であり、異なるタイプのハンドヘルドコントローラを用いた異なるマッピングの使用を示している。システム1700は、ホイールコントローラ1702、ハンドヘルドコントローラ414、及び入力プロセッサシステム407を含む。ホイールコントローラ1702は、ドライビングホイールの形状を有し、ステアリングホイール1708、方向パッド1706、正方形ボタン、三角形ボタン、円形ボタン、及びXボタンなどの更新された入力デバイスを含む。
ホイールコントローラ1702は、ハンドヘルドコントローラ414とは異なるタイプであることに留意されたい。例えば、ハンドヘルドコントローラ414は、左ハンドル1704A及び右ハンドル1704Bを有し、ステアリングホイールを含まない。ハンドル1704A及び1704Bは、ハンドヘルドコントローラ414の本体から下向きに延在する。比較すると、ホイールコントローラ1702は、ステアリングホイール1708を有するが、左右のハンドルを含まない。
さらに、第1のハンドヘルドコントローラと第2のハンドヘルドコントローラの両方が同じタイプのものであるが、異なるエンティティによって製造されているとき、第1のハンドヘルドコントローラのサブタイプは、第2のハンドヘルドコントローラのサブタイプとは異なるサブタイプである。例えば、Logitech(登録商標)corporationが製造したホイールコントローラは、Sony(登録商標)corporationが製造したホイールコントローラとは異なるホイールコントローラのサブタイプである。別の例として、Sony(登録商標)corporationによって製造されたハンドヘルドコントローラは、Microsoft(登録商標)corporationによって製造されたハンドヘルドコントローラとは異なるタイプのハンドヘルドコントローラである。
ホイールコントローラ1702は、ハンドヘルドコントローラ414の内部構成要素と同じまたは類似の内部構成要素を有する。例えば、ホイールコントローラ1702は、モーションセンシティブハードウェア、アナログ-デジタル変換器、プロセッサ、及び通信デバイスを含む。ホイールコントローラ1702の内部構成要素は、ハンドヘルドコントローラ414の内部構成要素が互いに結合されるのと同じ方法で互いに結合される。
ユーザ1が、ハンドヘルドコントローラ414またはホイールコントローラ1702などの更新されたコントローラを入力プロセッサシステム407と結合するとき、ユーザ1は、更新されたコントローラの1つ以上の更新された入力デバイスを操作して、更新されたコントローラのタイプ及びサブタイプを提供する。例えば、ユーザ1は、ハンドヘルドコントローラ414を入力プロセッサシステム407から切り離し、代わりに、ホイールコントローラ1702を入力プロセッサシステム407に結合する。更新されたコントローラがユーザ1によって操作されると、更新されたコントローラは、更新されたコントローラのタイプを有する識別信号を生成し、識別信号を入力プロセッサシステム407に送信する。また、更新されたコントローラは、更新されたコントローラのサブタイプを有する識別信号を生成し、入力プロセッサシステム407に識別信号を送信する。入力プロセッサ1314は、更新されたコントローラのタイプ及びサブタイプを受信し、タイプ及びサブタイプを入力エミュレータ1318に提供する。
更新されたコントローラのタイプ及びサブタイプを受信すると、入力エミュレータ1318は、タイプ及びサブタイプに基づいて、マッピング1710またはマッピング1712を選択する。例えば、入力エミュレータ1318は、更新されたコントローラのタイプがハンドヘルドコントローラ414であり、更新されたコントローラのサブタイプがSony(登録商標)corporation製のハンドヘルドコントローラ414であるときに、マッピング1710を選択する。更新されたコントローラのタイプが、ホイールコントローラ1702であり、更新されたコントローラのサブタイプが、Sony(登録商標)corporation製のホイールコントローラ1702であるときに、入力エミュレータはマッピング1712を選択する。マッピング1710の例は、ユーザアカウント1のデフォルトのマッピング、またはユーザアカウント1の現在のマッピングである。マッピング1712の例は、ユーザアカウント1のデフォルトのマッピング、またはユーザアカウント1の現在のマッピングである。
レガシーゲームNのプレイ中、入力プロセッサシステム407は、ハンドヘルドコントローラ414を切り離した後に、入力プロセッサシステム407に結合されたホイールコントローラ1702からユーザ入力419を受信する。ユーザ入力419は、ホイールコントローラ1702によって同じ方法で生成され、そこでは、ユーザ入力419は、サムスティック1302A及び1302Bの代わりにドライビングホイール1708が回転されることを除いて、ハンドヘルドコントローラ414によって生成される。例えば、ユーザ1は、ホイールコントローラ1702の更新された入力デバイスのうちの1つ以上を操作する。ホイールコントローラ1702のモーションセンシティブハードウェアは、ホイールコントローラ1702の1つ以上の更新された入力デバイスの操作に応答して、1つ以上のアナログモーションセンシティブ信号を生成する。ホイールコントローラ1702のアナログ-デジタル変換器は、1つ以上のアナログモーションセンシティブ信号を1つ以上のデジタルモーションセンシティブ信号に変換する。ホイールコントローラ1702のプロセッサは、符号化プロトコルを適用して、1つ以上の符号化信号を出力するために1つ以上のデジタルセンシティブ信号を符号化する。ホイールコントローラ1702の通信デバイスは、無線転送プロトコルを1つ以上の符号化された信号に適用して、1つ以上のデータパケットを生成し、1つ以上のデータパケットを通信デバイス1320に送信する。
通信デバイス1320は、1つ以上の符号化信号を抽出するために無線転送プロトコルを1つ以上のデータパケットに適用し、1つ以上の符号化信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、1つ以上の符号化された信号から、ホイールコントローラ1702の更新された入力デバイスのどれがユーザ1によって操作されているかを識別し、1つ以上の更新された入力デバイスの1つ以上の識別子を入力エミュレータ1318に提供する。入力エミュレータ1318は、マッピング1712にアクセスし、マッピング1712を適用して、ハンドヘルドコントローラ1306(図13)の対応する1つ以上のレガシー入力デバイスを識別して、ユーザ入力420を生成する。
図18は、ゲームコンソール402からゲームコンソール1202への現在のマッピングの通信を説明するためのシステム1800の実施形態の図である。システム1800は、ゲームコンソール402、コンピュータネットワーク408、サーバシステム404、及びゲームコンソール1202を含む。
ゲームコンソール1202は、入力プロセッサシステム1207を含み、これは、入力プロセッサ1804、入力エミュレータ1806、メモリデバイス1808、及び通信デバイス1810を含む。説明として、入力エミュレータ1806は、ゲームコンソール1202内に実装されると、ハンドヘルドコントローラ1212を使用することによってレガシーゲームNのプレイを可能にする。通信デバイス1810の例は、近距離通信プロトコルを適用する通信デバイスである。
通信デバイス1810は、入力プロセッサ1804に結合されている。入力プロセッサ1804及び入力エミュレータ1806は、メモリデバイス1808に結合されている。入力プロセッサシステム1207は、バス1218に結合されている。
ゲームコンソール402の入力プロセッサ1314は、メモリデバイス1316からの現在のマッピング1404にアクセス(読み取りなど)し、現在のマッピング1404をNIC1212に送信する。例えば、現在のマッピング1404が生成された後の所定の期間内に、入力プロセッサ1314は、現在のマッピング1404をNIC1212に送信する。説明すると、現在のマッピング1404が作成された直後に、現在のマッピング1404は、メモリデバイス1316に格納され、同時にNIC1212に送信される。NIC1212は、1つ以上のデータパケットを生成するためにネットワーク通信プロトコルを現在のマッピング1404に適用し、サーバシステム404の1つ以上のメモリデバイスに格納するために、コンピュータネットワーク408を介して1つ以上のデータパケットをサーバシステム404に送信する。
ユーザ1は、ハンドヘルドコントローラ1212を使用して、ユーザアカウント1にログインし、ゲームコンソール1202を介してレガシーゲームNにアクセスする。さらに、レガシーゲームNのプレイの前またはプレイ中に、ユーザ1は、ハンドヘルドコントローラ1212の1つ以上の更新された入力デバイスを選択して、サーバシステム404から現在のマッピング1404にアクセスするための表示(要求など)を生成する。ハンドヘルドコントローラ1212の1つ以上の更新された入力デバイスの選択を受信すると、ハンドヘルドコントローラ1212は、無線転送プロトコルを適用して1つ以上のデータパケットを生成し、1つ以上のデータパケットを通信デバイス1810に送信する。通信デバイス1810は、無線転送プロトコルを適用して、現在のマッピング1404がユーザアカウント1について取得されるべきであるという指示を取得し、その指示をゲームコンソール1202のメモリデバイス1808に格納する。
ゲームコンソール1202のCPU922(図9B)などのCPUは、メモリデバイス1808から現在のマッピング1404を取得するための指示にアクセスし、その指示をNIC1210に送信する。NIC1210は、現在のマッピング1404を取得するための指示にネットワーク通信プロトコルを適用して、1つ以上のデータパケットを生成し、コンピュータネットワーク408を介してサーバシステム404に1つ以上のデータパケットを送信する。
ゲームコンソール1202から現在のマッピング1404の指示を受信することに応答して、サーバシステム404は、サーバシステム404の1つ以上のメモリデバイスから現在のマッピング1404にアクセスし、コンピュータネットワーク408を介して現在のマッピング1404をゲームコンソール1202に送信する。例えば、サーバシステム404のプロセッサは、現在のマッピング1404を取得するための指示が、ユーザアカウント1に対応することを判定する。説明すると、サーバシステム404のプロセッサは、ユーザ1がユーザアカウント1にログインしている間に指示が受信されたことを判定して、指示がユーザアカウント1に対応することを判定する。この例を続けると、サーバシステム404のプロセッサは、サーバシステム404の1つ以上のメモリデバイスから現在のマッピング1404にアクセスし、サーバシステム404のネットワークインターフェースコントローラに現在のマッピング1404を送信する。サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを現在のマッピング1404に適用して、1つ以上のデータパケットを生成し、コンピュータネットワーク408を介してゲームコンソール1202に1つ以上のデータパケットを送信する。
ゲームコンソール1202のNIC1210は、サーバシステム404から受信した1つ以上のデータパケットから現在のマッピング1404を抽出し、現在のマッピング404をメモリデバイス1808に格納する。ユーザ入力1452は、ユーザ入力1452が、入力プロセッサシステム407によってハンドヘルドコントローラ414から受信されるのと同じ方法で、入力プロセッサシステム1207によってハンドヘルドコントローラ1212から受信される。ユーザ入力1452が受信されると、入力エミュレータ1806は、メモリデバイス1808から現在のマッピング1404にアクセスして、ユーザ入力1454を判定する。例えば、ユーザ入力1454は、ユーザ入力1454が、ユーザ入力1452からの入力エミュレータ1318によって判定されるのと同じ方法で、ユーザ入力1452からの入力エミュレータ1806によって判定される。入力エミュレータ1806は、バス1218を介してエミュレーションプロセッサシステム1206にユーザ入力1454を送信する。
ユーザ入力1454を受信すると、エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、エミュレーションプロセッサシステム1206のキャッシュ1208をチェックして、キャッシュ1208が、ユーザ入力1454を処理するためのゲームコードGCNの基本ブロック1~nのうちの1つ以上を含むかどうかを判定する。キャッシュ1208が、ユーザ入力1454を処理するための基本ブロック1~nのうちの1つ以上を含まないと判定すると、エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、ユーザ入力1454を処理するためのエミュレーションプロセッサシステム1206の1つ以上のメモリデバイスからエミュレートされたPUコード命令1~Mのうちの1つ以上にアクセスし、エミュレートされたPUコード命令1~Mの1つ以上をコンパイルして、ユーザ入力1454を処理するための基本ブロック1~nの1つ以上を生成する。エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、エミュレーションプロセッサシステム1206のブロックディスパッチャに基本ブロック1~nのうちの1つ以上を送信する。1つ以上の基本ブロック1~nを受信すると、エミュレーションプロセッサシステム1206のブロックディスパッチャは、基本ブロック1~nのうちの1つ以上を実行して、ユーザ入力1454に基づいて1つ以上の画像フレームを生成する。一方で、キャッシュ1208が、ユーザ入力1454を処理するための基本ブロック1~nの1つ以上を含むと判定すると、エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、エミュレーションプロセッサシステム1206のブロックディスパッチャに命令を送信する。命令を受信することに応答して、エミュレーションプロセッサシステム1206のブロックディスパッチャは、ユーザ入力1454を処理するために基本ブロック1~nの1つ以上を実行する。
図19Aは、画像1900のスクリーンショットであり、ハンドヘルドコントローラ414またはホイールコントローラ1702(図17)またはハンドヘルドコントローラ1212(図18)などの更新されたハンドヘルドコントローラのタイプ及びサブタイプの受信を示している。画像1900は、レガシーゲームNの仮想環境452(図4B)を含む。
レガシーゲームNのプレイ中またはプレイ前に、ユーザ1は、第1の更新されたハンドヘルドコントローラを入力プロセッサシステム407から切り離し、第2の更新されたハンドヘルドコントローラを入力プロセッサシステム407に結合する。次に、ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、設定オプションを含むメニュー1902にアクセスする。エミュレーションプロセッサシステム409のCPU922(図9B)などのCPUは、メニュー1902をディスプレイデバイス410(図4B)のディスプレイ画面に表示するように、エミュレーションプロセッサシステム409のGPU924(図9B)などのGPUに指示する。ユーザ1はさらに、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、設定オプションを選択する。設定オプションが選択されると、エミュレーションプロセッサシステム409のCPUは、ディスプレイデバイス410(図4B)のディスプレイ画面に別のメニューを表示するように、エミュレーションプロセッサシステム409のGPUに指示する。他のメニューには、制御と周辺機器のオプションが含まれている。次に、ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、制御及び周辺機器オプションを選択する。制御及び周辺機器オプションが選択されると、エミュレーションプロセッサシステム409のCPUは、エミュレーションプロセッサシステム409のGPUに指示して、ディスプレイデバイス410のディスプレイ画面にメニュー1912(図19B)を表示する。
図19Bは、メニュー1912を説明するための画像1910のスクリーンショットである。メニュー1910は、ボタンを再割り当てするためのボタンの再割り当てオプションと、ガン形状コントローラが入力プロセッサシステム407と共に第2の更新されたハンドヘルドコントローラとして使用されることを入力プロセッサシステム407(図4B)に示すための銃型ハンドヘルドコントローラオプションと、ホイールコントローラが入力プロセッサシステム407(図4B)と共に第2の更新されたハンドヘルドコントローラとして使用されることを入力プロセッサシステム407に示すためのホイールハンドヘルドコントローラオプションと、を含む。銃型コントローラは、更新されたハンドヘルドコントローラのタイプの一例である。
ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、ホイールハンドヘルドコントローラオプションを選択する。ホイールハンドヘルドコントローラオプションが選択されると、エミュレーションプロセッサシステム409のCPUは、第1のサブタイプコントローラオプション及び第2のサブタイプコントローラオプションを含むメニューをディスプレイデバイス410のディスプレイ画面に表示するようにエミュレーションプロセッサシステム409のGPUに命令する。第1のサブタイプコントローラ及び第2のサブタイプコントローラは、ホイールコントローラのサブタイプの例である。
ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、第2のサブタイプコントローラオプションを選択する。第2のサブタイプコントローラオプションの選択を受信すると、エミュレーションプロセッサシステム409のCPUは、レガシーゲームNのプレイを継続または開始するようにエミュレーションプロセッサシステム409のGPUに指示する。
図20は、デフォルトマッピングなどのマッピング2002を説明するための画像2000のスクリーンショットの実施形態である。画像2000は、レガシーゲームNの仮想環境452を含む。マッピング2002は、デフォルトのマッピング1308(図13)の例である。レガシーゲームNのプレイ中またはプレイ前に、エミュレーションプロセッサシステム409のCPUは、ディスプレイデバイス410のディスプレイ画面にマッピング2002を表示するようにエミュレーションプロセッサ409のGPUに指示する。
マッピング2022は、レガシーハンドヘルドコントローラの入力デバイスと更新されたハンドヘルドコントローラの入力デバイスとの間の対応または1対1の関係などの固有の関係を含む。例えば、三角形ボタンなどのレガシーハンドヘルドコントローラのレガシー入力デバイス1は、三角形ボタンなどの更新されたハンドヘルドコントローラの更新された入力デバイス1にマッピングされる。別の例として、更新されたハンドヘルドコントローラのタッチパッド1602(図16A)などのレガシー入力デバイス2は、レガシーハンドヘルドコントローラの選択ボタンなどの更新された入力デバイス2と対応している。さらに別の例として、レガシーハンドヘルドコントローラのレガシー入力デバイス3は、更新されたハンドヘルドコントローラの更新された入力デバイス2と1対1の関係を有する。
図21Aは、ユーザ1からの更新されたグラフィックスパラメータの受信を説明するためのシステム2100の実施形態の図である。システム2100は、ディスプレイデバイス410、ハンドヘルドコントローラ414、及びゲームコンソール402を含む。
ゲームコンソール402は、エミュレーションプロセッサシステム409、メモリデバイス406、及びGPUメモリデバイス2104を含む。エミュレーションプロセッサシステム409は、CPU922及びGPU924を含む。GPUメモリデバイス2104は、バス930に結合されている。GPUメモリデバイス2104は、メモリシステム926(図9B)のメモリデバイスの一例である。
ユーザ1がユーザアカウント1にログインした後、レガシーゲームNのプレイ中またはプレイ前に、GPU924は、UGP1及びUGP2などの1つ以上の更新されたグラフィックパラメータのリストを表示するようにディスプレイデバイス410を制御する。例えば、レガシーゲームNのプレイ中に、GPU924は、更新されたグラフィックパラメータUGP1及びUGP2をディスプレイデバイス410上にレンダリングする。
更新されたグラフィックパラメータがディスプレイデバイス410に表示された後、ユーザ1は、ハンドヘルドコントローラ414の1つ以上の更新された入力デバイスを操作して、1つ以上の更新されたグラフィックパラメータを選択し、ハンドヘルドコントローラ414は、操作に基づいてユーザ入力2102を生成する。ユーザ入力2102は、1つ以上の更新されたグラフィックパラメータの選択の指示を含む。ユーザ入力2102は、ハンドヘルドコントローラ414からゲームコンソール402のCPU922に送信される。CPU922は、1つ以上の更新されたグラフィックパラメータをユーザ入力2102から取得し、1つ以上の更新されたグラフィックパラメータをGPU924に提供する。GPU924は、1つ以上のレガシーグラフィックパラメータを1つ以上のグラフィックパラメータにエミュレートする。
一実施形態では、任意数の更新されたグラフィックパラメータがディスプレイデバイス410に表示される。
図21B-1は、1つ以上のレガシーグラフィックパラメータの1つ以上の更新されたグラフィックパラメータへのエミュレーションを説明するためのシステム2120の実施形態の図である。システム2120は、ハンドヘルドコントローラ414及びゲームコンソール402を含む。
GPU924には、GPUエミュレータ2122が含まれている。一例として、本明細書で説明するように、GPUエミュレータは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせである。説明すると、GPUエミュレータは、プロセッサ、PLD、ASIC、またはコントローラである。別の例として、GPUエミュレータはコンピュータプログラムである。
1つ以上の更新されたグラフィックパラメータの選択の指示がハンドヘルドコントローラ414から受信されると、CPU922は、更新されたグラフィックパラメータをGPU924に提供する。GPU924は、更新されたグラフィックパラメータをGPUメモリデバイス2104内に格納する。ユーザ入力420に応答して、GPU924は、更新されたコードの基本ブロック1~nのうちの1つ以上を実行して、レガシーグラフィックパラメータLGP1及びレガシーグラフィックパラメータLGP2などの1つ以上のレガシーグラフィックパラメータが、レガシーゲームNの画像フレーム2123内の仮想オブジェクト及び仮想背景に適用されていると判定する。画像フレーム2123は、更新された画像フレームである。1つ以上の更新されたグラフィックパラメータを適用するためのユーザ入力2102が受信される前に、ユーザ入力420が生成されるユーザ入力419が受信されることに留意されたい。
GPU924によって、1つ以上のレガシーグラフィックパラメータを判定して、画像フレーム422(図4B)などの1つ以上のレガシー画像フレームを生成すると、GPUエミュレータ2122は、1つ以上のレガシーグラフィックパラメータの代わりに1つ以上の更新されたグラフィックパラメータをレガシー画像フレームに適用し、画像フレーム2123を出力する。1つ以上の更新されたグラフィックパラメータの適用は、レガシーゲームNの仮想環境の画像フレームのレンダリングと呼ばれることがある。例えば、GPUエミュレータ2122は、GPUメモリデバイス2104から、更新されたグラフィックパラメータUGP1をレガシーグラフィックパラメータLGP1に対応するものとして、かつ、更新されたグラフィックパラメータUGP2をレガシーグラフィックパラメータLGP2に対応するものとして識別する。この例では、更新されたグラフィカルパラメータUGP1とレガシーグラフィカルパラメータLGP1は同じタイプである。説明すると、更新されたグラフィカルパラメータUGP1は、仮想オブジェクトの仮想画像の更新された解像度であり、レガシーグラフィカルパラメータLGP1は、仮想オブジェクトの仮想画像のレガシー解像度である。別の例として、更新されたグラフィカルパラメータUGP2は、32ビットカラーパレットから仮想オブジェクトに適用される色のセットであり、レガシーグラフィカルパラメータLGP2は、16ビットカラーパレットから仮想オブジェクトに適用される色のセットである。別の例として、グラフィカルパラメータLGP1とUGP1の両方は、あるタイプのグラフィカルパラメータの同じ識別子(英数字コードなど)を含む。この例では、GPUエミュレータ2122は、グラフィカルパラメータUGP1及びLGP1の両方が同じ識別子を含むとの判定に応答して、更新されたグラフィカルパラメータUGP1がレガシーグラフィカルパラメータLGP1に対応していると判定する。GPU924は、画像フレーム2123に従って、仮想オブジェクトを有する仮想環境及び仮想環境452の仮想背景などの仮想環境の画像をディスプレイデバイス410上に表示する。例えば、GPU924は、ディスプレイデバイス410の発光体を制御して、画像フレーム2123に従って画像を表示する。仮想環境の画像は、レガシーゲームNのプレイを表示するためにディスプレイデバイス410上に表示される。
一実施形態では、レガシーGPU904(図9A)は、エミュレートされたPUコード命令1~Mのうちの1つ以上を実行する。エミュレートされたPUコード命令1~Mを実行すると、更新されたグラフィックパラメータは生成され得ない。むしろ、レガシーグラフィカルパラメータが生成される。
一実施形態では、CPU922は、基本ブロックコンパイラ104を実行し、GPU924は、ブロックディスパッチャ302を実行する。
一実施形態では、CPU922は、基本ブロックコンパイラ104及びブロックディスパッチャ302を実行する。
一実施形態では、更新されたグラフィカルパラメータは、レガシーグラフィカルパラメータに対応していない。例えば、更新されたグラフィカルパラメータUPG1に対応するレガシーグラフィカルパラメータはない。レガシーグラフィックパラメータのいずれかを適用する代わりに、GPUエミュレータ2122は、レガシーゲームNのプレイ中に実行されるレンダリング操作中に、更新されたグラフィックパラメータUPG1を適用する。
一実施形態では、GPUエミュレータ2122は、レガシー画像フレームに対するニアレスト、またはバイリニア、またはバイキュービック、またはそれらの組み合わせなどの補間操作を適用して、レガシーグラフィックパラメータが不明なフレームのためにレガシー画像のレガシー画像ピクセルに適用される更新されたグラフィックパラメータを推定する。例えば、GPUエミュレータ2122は、仮想環境452の第1の画像ピクセルの色及び強度値を仮想環境452の第2の画像ピクセルに補間して、第1及び第2の画像ピクセルを有する更新された画像フレームを出力する。この例では、更新されたコードの1つ以上の基本ブロック1~nの実行時に、第2の画像ピクセルの色や強度の値などのレガシーグラフィックパラメータは不明である。この例では、第1及び第2の画像ピクセルは、更新された画像フレーム2123の1つなど、更新された画像フレームの部分である。
一実施形態では、GPUエミュレータ2122は、1つ以上の補間操作及び1つ以上の畳み込み操作をレガシー画像フレームに適用して、レガシー画像フレームのレガシー画像ピクセルに適用される更新されたグラフィックパラメータを推定する。例えば、バイキュービック補間を適用した後、GPUエミュレータ2122は、9X9畳み込み、1X1畳み込み、及び5X5畳み込みをレガシー画像フレームに適用して、更新された画像フレームを出力する。例えば、nXm畳み込みにおいて、GPUエミュレータ2122は、レガシー画像フレームのnXm画像ピクセルを取得し、nXm画像ピクセルをnXmカーネルと畳み込み、更新されたグラフィカルパラメータの結果値を出力する。ここで、n及びmは正の整数であり、nは画像ピクセルまたはカーネルピクセルの行番号を表し、mは画像ピクセルのカーネルピクセルの列番号を表している。例えば、nは4であり、mは2である。別の例として、mとnの両方が4である。nXmカーネルが適用されるレガシー画像フレームのnX1ピクセルの更新されたグラフィックパラメータの値は、結果値に置き換えられる。
一実施形態では、レガシー画像フレームの画像ピクセルに畳み込みを適用する代わりに、GPUエミュレータ2122は、画像ピクセルをサブピクセルに分割し、畳み込みをサブピクセルに適用する。この実施形態では、畳み込みは、画像ピクセルに畳み込みを適用する前または後にサブピクセルに適用される。
一実施形態では、GPU924は、深層学習手法を適用する。深層学習手法では、GPUエミュレータ2122は、レガシー画像フレームを受信し、比較画像フレームが格納されているデータベースにアクセスし、レガシー画像フレームを比較画像フレームと比較して、更新された画像フレームを出力する。例として、比較画像フレームは、レガシー画像フレームと同じ仮想オブジェクトが1つ以上を有している。この例では、比較画像フレームは比較戦闘機を有し、レガシー画像フレームは仮想オブジェクト454を有する。この例を続けると、GPUエミュレータ2122は、比較戦闘機を仮想オブジェクト454と比較して、仮想オブジェクト454が比較戦闘機に基づいて変更されるかどうかを判定する。この例をさらに続けると、GPUエミュレータ2122は、仮想オブジェクト454の少なくとも一部分(翼など)が、比較戦闘機の少なくとも対応する部分(翼など)と置き換えられると判定する。この例では、GPUエミュレータ2122から判定を受信すると、GPU924は、仮想オブジェクト454の少なくとも一部分を比較戦闘機の少なくとも対応する部分に置き換えて、結果の戦闘機を出力し、更新された画像フレームをさらに出力する。更新された画像フレームは、GPU924によってデータベース内に格納される。データベースはGPUメモリデバイス2104内に格納されていることに留意されたい。
一実施形態では、GPUは再帰的学習手法を適用する。再帰学習手法には深層学習手法が含まれる。また、再帰学習手法では、GPUエミュレータ2122は、追加のレガシー画像フレームを受信し、更新された画像フレームが格納されているデータベースにアクセスし、追加のレガシー画像フレームを更新された画像フレームと比較して、追加の更新された画像フレームを出力する。一例として、更新された画像フレームは、追加のレガシー画像フレームのものと同じ仮想オブジェクトを有している。この例では、更新された画像フレームは、結果の戦闘機を有しており、追加のレガシー画像フレームには仮想オブジェクト454を有している。この例を続けると、GPUエミュレータ2122は、結果の戦闘機を仮想オブジェクト454と比較して、仮想オブジェクト454が、結果の戦闘機に基づいて修正されるかどうかを判定する。この例をさらに続けると、GPUエミュレータ2122は、仮想オブジェクト454の少なくとも一部(翼など)が、結果の戦闘機の少なくとも対応する部分(翼など)と置き換えられるべきであると判定する。この例では、GPUエミュレータ2122から判定を受信すると、GPU924は、仮想オブジェクト454の少なくとも一部分を結果の戦闘機の少なくとも対応する部分に置き換えて、追加の結果の戦闘機を出力し、さらに追加の更新された画像フレームを出力する。追加の更新された画像フレームは、次のレガシー画像フレームに適用するためにGPU924によってデータベース内に格納される。次のレガシー画像フレームは、GPUエミュレータ2122によって、追加のレガシー画像フレームの受信に続いて受信される。
図21B-2は、ブロックディスパッチャ302から出力されたレガシー画像フレームなどの画像フレーム422からの更新された画像フレーム2123の生成を説明するためのシステム2130の実施形態の図である。システム2130は、ブロックディスパッチャ302及びGPUエミュレータ2122を含む。ブロックディスパッチャ302は、GPUエミュレータ2122に結合されている。ブロックディスパッチャ302は、更新されたコードの基本ブロック1~nのうちの1つ以上を実行して、レガシーグラフィックパラメータを含む画像フレーム422を生成する。GPUエミュレータ2122は、画像フレーム422を受信し、画像フレーム422を解析してレガシーグラフィックパラメータを識別し、レガシーグラフィックパラメータを更新されたグラフィックパラメータに変換して、更新された画像フレーム2123を出力する。
一実施形態では、各画像フレームは画像ファイルである。例えば、第1の画像フレームは第1の画像ファイルであり、第2の画像フレームは第2の画像ファイルである。
図21C-1は、レガシー及び更新されたグラフィックパラメータのリストの実施形態、ならびにレガシー及び更新されたグラフィックパラメータ間の対応である。レガシーグラフィックパラメータLGP1またはLGP2の一例は、仮想環境の仮想画像の640X480ピクセル解像度、720X480ピクセル解像度、及び720X586ピクセル解像度などのレガシー画像解像度である。この例では、レガシーグラフィックパラメータLGP1に対応する更新されたグラフィックパラメータUGP1、またはレガシーグラフィックパラメータLGP2に対応する更新されたグラフィックパラメータUGP2は、更新された画像解像度である。説明すると、更新された解像度は、レガシーグラフィックパラメータのピクセル解像度の4倍である高解像度(HD)解像度と、レガシーグラフィックパラメータのピクセル解像度の8倍である4K解像度を含む。
レガシーグラフィカルパラメータLGP1またはLGP2の別の例は、レガシーラインの太さである。レガシーラインは、レガシーゲームNの仮想シーンの1つ以上の仮想オブジェクトの1つ以上の部分と、仮想シーンの仮想背景の一部分のライン画像である。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたライン太さである。説明として、更新されたライン太さは、レガシーライン太さの倍数または係数である。
レガシーグラフィカルパラメータLGP1またはLGP2のさらに別の例は、レガシーラインカウントであり、これは、レガシーゲームNの仮想環境の画像を形成するピクセルを有するレガシーラインの数によって規定される。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたラインカウントである。説明として、更新されたラインカウントは、レガシーラインカウントの倍数または係数である。
更新されたグラフィカルパラメータUGP1またはUGP2のさらに別の例は、更新されたスキャンライン太さであり、これは、レガシーゲームNの仮想環境の仮想画像の画像フレームにオーバーレイされる各スキャンライン太さによって規定されている。説明すると、各スキャンラインは、レガシー画像フレームにオーバーレイされる。各スキャンラインは、仮想画像の一方の端から仮想イメージの反対側の端まで延在するようにオーバーレイされる。この例では、更新されたスキャンライン太さに対応する対応するレガシーグラフィカルパラメータがないことに留意されたい。
更新されたグラフィカルパラメータUGP1またはUGP2の別の例は、更新されたスキャンラインカウントであり、これは、レガシーゲームNの仮想環境の仮想イメージにオーバーレイされるスキャンラインの数によって規定される。この例では、更新されたスキャンラインカウントに対応する対応するレガシーグラフィカルパラメータがないことに留意されたい。
しかし、レガシーグラフィカルパラメータLGP1またはLGP2の例は、レガシーアンチエイリアシングフィルタとレガシービデオフィルタである。レガシーアンチエイリアシングフィルタ及びレガシービデオフィルタは、レガシーゲームNの仮想環境の仮想画像のピクセル内で出力され、かつ明らかな、ぼやけた色や輝度などのノイズを低減または除去する。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたアンチエイリアシングフィルタ、及び更新されたビデオフィルタである。説明として、更新されたアンチエイリアシングフィルタ及びビデオフィルタは、レガシーアンチエイリアシングフィルタ及びレガシービデオフィルタがノイズを除去または低減する解像度よりも高い解像度でノイズを低減または除去する。この説明では、レガシーゲームNの仮想オブジェクトを表すために使用されるポリゴンのポリゴンエッジの平滑化によって、または、レガシーゲームNの仮想シーンの仮想背景のピクセルの輝度を補間することによって、ノイズが除去または低減されている。
レガシーグラフィックパラメータLGP1またはLGP2のさらに別の例は、レガシーカラースペースまたはレガシーカラーパレットなどのレガシーカラースケールであり、これは、レガシーカラースケール内の各色を表すビット数によって定義される。レガシー色空間の説明は、ビデオグラフィックアレイ(VGA)色空間である。レガシーカラーパレット内の各色は16ビットで表されている。レガシーカラーパレット内の色は、レガシーゲームNの仮想環境の画像を表すために適用され得る。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたカラースケールである。説明として、更新されたカラースケールは、32ビットカラーパレットである。更新されたカラースケールの各色は、16ビットではなく32ビットで表される。
レガシーグラフィカルパラメータLGP1またはLGP2の別の例は、20フレーム/秒(fps)または30fpsなどのレガシーレンダリングレートであり、このレンダリングレートで、レガシー画像フレームがレンダリングされ、ディスプレイデバイス410上に表示される。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたレンダリングレートであり、これはレガシーレンダリングレートの倍数である。説明として、更新されたレンダリングレートは、60fpsまたは120fpsであり、このレンダリングレートで、更新された画像フレームがレンダリングされ、ディスプレイデバイス410上に表示される。
レガシーグラフィックパラメータLGP1またはLGP2のさらに別の例は、レガシーアップスケールファクタであり、これは、レガシー画像解像度と、レガシーマシン900(図9A)で使用される陰極線管などの標準テレビのサイズによって定義される。レガシーアップスケール係数は、仮想オブジェクトまたは仮想背景の画像を拡大縮小して、レガシー解像度が画像に適用された後、標準のテレビの表示ピクセルを塗りつぶす。この例では、レガシーグラフィカルパラメータLGP1に対応する更新されたグラフィカルパラメータUGP1、またはレガシーグラフィカルパラメータLGP2に対応する更新されたグラフィカルパラメータUGP2は、更新されたアップスケール係数である。説明すると、更新されたアップスケール係数には、HD解像度または4K解像度が含まれる。また、この説明では、更新されたアップスケール係数は、仮想オブジェクトまたは仮想背景の画像をスケーリングし、HDディスプレイデバイスまたは4Kディスプレイデバイスの表示ピクセルを塗りつぶす。HDディスプレイデバイス及び4Kディスプレイデバイスは、ディスプレイデバイス410の例である。
図21C-2は、レンダリング操作中に仮想オブジェクトの解像度を変更するためにGPUエミュレータ2122(図21B-1)によって実行される方法の実施形態を説明するための図である。GPUエミュレータ2122がない場合、レガシーゲームNの仮想シーンにおける仮想オブジェクト2152の位置及び方向2150は、より大きくなるようにサイズが再変更され、4色ピクセルを使用してGPU924によってレンダリングされる。例えば、仮想オブジェクト2152は、GPUエミュレータ2122を含まないレガシーGPU904(図9A)によってレンダリングされる。
GPUエミュレータ2122が使用されるとき、位置及び向き2150は、サイズ変更され、レガシーゲームNの仮想シーンにおいて仮想オブジェクト2154としてレンダリングされる。一例として、仮想オブジェクト2154は、仮想オブジェクト2152よりも高い解像度を有する。説明すると、仮想オブジェクト2154は、仮想オブジェクト2152よりも多数の画像ピクセルを有する。さらに説明するために、GPUエミュレータ2122は、仮想オブジェクト2152の1つ以上のより大きなカラーピクセルを、より小さなピクセルの1つ以上の対応するセットで効果的に置き換えて、仮想オブジェクト2154を出力する。別の例として、仮想オブジェクト2154は、仮想オブジェクト2152の輪郭2158と比較して、より顕著な輪郭2156を有する。さらに別の例として、仮想オブジェクト2154は、仮想オブジェクト2152と比較して漫画のように見える。説明すると、仮想オブジェクト2154は、2次元仮想オブジェクトとしてレンダリングされ、仮想オブジェクト2152は、3次元仮想オブジェクトとしてレンダリングされる。別の例として、輪郭2156は、輪郭2158と比較してより滑らかなエッジ及び頂点を有する。別の例として、仮想オブジェクト2154は、仮想オブジェクト2152と比較してより高いコントラストを有する。さらに別の例として、仮想オブジェクト2154は、仮想オブジェクト2152の強度レベルと比較して、より多様な強度レベルを有する。
図21Dは、更新されたグラフィックパラメータに基づいて更新された画像フレーム2160を生成するための方法の実施形態を説明するための図である。CPU922(図21B-1)は、ゲームコードGCNの基本ブロック1~nのうちの1つ以上を実行して、レガシーゲームNの仮想シーンにおける仮想オブジェクト及び仮想背景の位置及び方向を判定する。画像フレーム2160は、画像フレーム2123の1つの例である(図21B-1)。GPU924(図21B-1)は、ゲームコードGCNの基本ブロック1~nのうちの1つ以上を実行して、レガシーグラフィックパラメータを有する画像フレーム422などのレガシー画像フレームを生成する。レガシーグラフィックパラメータは、レガシーゲームNの仮想シーンにおける仮想オブジェクト及び仮想背景の位置及び方向にGPU924によって適用される。GPU924は、仮想環境452の画像を表示するためにレガシー画像フレームをディスプレイデバイス410に提供する代わりに、GPUエミュレータ2122を適用(実行するなど)して、レガシーグラフィックパラメータに対応する更新されたグラフィックパラメータを判定する。GPU924は、レガシーグラフィックパラメータの代わりに更新されたグラフィックパラメータに基づいて更新された画像フレーム2160を生成し、レガシーゲームNの画像を表示するために更新された画像フレームをディスプレイデバイス410に送信する。
図22Aは、ユーザ1からの更新されたオーディオパラメータの受信を説明するためのシステム2200の実施形態の図である。システム2200は、ディスプレイデバイス410、ハンドヘルドコントローラ414、及びゲームコンソール402を含む。
ゲームコンソール402は、エミュレーションプロセッサシステム409及びオーディオメモリデバイス2206を含む。エミュレーションプロセッサシステム409は、オーディオエミュレータ2204を含むAPU931を含む。一例として、本明細書で説明するオーディオエミュレータは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせである。説明すると、オーディオエミュレータは、プロセッサ、またはPLD、またはASIC、またはコントローラである。別の説明として、オーディオエミュレータはコンピュータプログラムである。
オーディオメモリデバイス2206及びAPU931は、バス930に結合されている。一例として、APU931は、更新されたマシン920内に実装されている。また、一例として、オーディオメモリデバイス2206は、メモリシステム926(図9B)内に実装される。
ユーザ1がユーザアカウント1にログインした後、レガシーゲームNのプレイ中またはプレイ前に、GPU924は、ディスプレイデバイス410を制御して、UAP1及びUAP2などの1つ以上の更新されたオーディオパラメータのリストを表示する。例えば、レガシーゲームNのプレイ中に、GPU924は、更新されたオーディオパラメータUAP1及びUAP2をディスプレイデバイス410上にレンダリングする。
更新されたオーディオパラメータがディスプレイデバイス410に表示された後、ユーザ1は、ハンドヘルドコントローラ414の1つ以上の更新された入力デバイスを操作して、1つ以上の更新されたオーディオパラメータを選択し、ハンドヘルドコントローラ414は、操作に基づいてユーザ入力2208を生成する。ユーザ入力2208は、1つ以上の更新されたオーディオパラメータの選択の指示を含む。ユーザ入力2208は、ハンドヘルドコントローラ414からCPU922に送られる。CPU922は、ユーザ入力2208から1つ以上の更新されたオーディオパラメータを取得し、1つ以上の更新されたオーディオパラメータをAPU931のAPUエミュレータ2204に送信する。APUエミュレータ2204は、1つ以上のレガシーオーディオパラメータを1つ以上の更新されたオーディオパラメータにエミュレートする。
一実施形態では、任意数の更新されたオーディオパラメータがディスプレイデバイス410に表示される。
図22B-1は、1つ以上のレガシーオーディオパラメータの1つ以上の更新されたオーディオパラメータへのエミュレーションを説明するためのシステム2250の実施形態の図である。システム2120は、ハンドヘルドコントローラ414及びゲームコンソール402を含む。
1つ以上の更新されたオーディオパラメータの選択の指示が、ハンドヘルドコントローラ414からのユーザ入力2208を介して受信されると、CPU922は、バス930を介してAPU931に更新されたオーディオパラメータを提供する。APU931は、更新されたグラフィックパラメータをオーディオメモリデバイス2206内に格納する。ユーザ入力420に応答して、APU931は、更新されたコードの基本ブロック1~nのうちの1つ以上を実行して、レガシーグラフィックパラメータLAP1及びレガシーグラフィックパラメータLAP2などの1つ以上のレガシーグラフィックパラメータが、レガシーゲームNの画像フレーム2123内の仮想オブジェクト及び仮想背景に適用されていると判定する。APU931はさらに、画像フレーム2123(図21B-1)と同期して出力される1つ以上のレガシーオーディオパラメータに基づいて、1つ以上のレガシーオーディオフレームを生成する。1つ以上の更新されたオーディオパラメータを適用するためのユーザ入力2208が受信される前に、ユーザ入力420が生成されるユーザ入力419が受信されることに留意されたい。
APU931によって、画像フレーム2123と共に出力されるレガシーオーディオフレームが生成されると、オーディオエミュレータ2204は、更新されたオーディオフレームである1つ以上のオーディオフレーム2252を生成するための1つ以上のレガシーオーディオパラメータの代わりに、1つ以上の更新されたオーディオパラメータをレガシーオーディオフレームに適用する。1つ以上の更新されたオーディオパラメータの適用は、レガシーゲームNの仮想環境で出力されるオーディオフレームの生成と呼ばれることがある。例えば、オーディオエミュレータ2204は、オーディオメモリデバイス2206から、更新されたオーディオパラメータUAP1をレガシーオーディオパラメータLAP1に対応するものとして、かつ、更新されたオーディオパラメータUAP2をレガシーオーディオパラメータLAP2に対応するものとして識別する。この例では、更新されたオーディオパラメータUAP1とレガシーオーディオパラメータLAP1は同じタイプである。説明すると、更新されたオーディオパラメータUAP1は、更新されたサンプリングレートであり、これに基づいて、レガシーゲームNの仮想オブジェクトの仮想イメージからサウンドが出力され、レガシーオーディオパラメータLAP1は、レガシーサンプリングレートであり、これに基づいてサウンドが仮想イメージから出力され得る。更新されたサンプリングレートは、レガシーサンプリングレートよりも大きくなっている。さらに説明すると、レガシーサンプリングレートは、10,000サンプル/秒であり、更新されたサンプリングレートは、96,000サンプル/秒である。別の説明として、更新されたオーディオパラメータUAP2は、レガシーゲームNの仮想オブジェクトからステレオ、モノラル、またはサラウンドサウンドとしてサウンドが出力されることを可能にする。この説明では、レガシーオーディオパラメータLGP2は、仮想オブジェクトからステレオとしてのみサウンドが出力されることを可能にする。さらに別の説明として、更新されたオーディオパラメータUAP1は、レガシーオーディオパラメータLAP1のオーディオサウンドのサンプルスペースと比較して、オーディオサウンドのサンプルスペースが大きくなっている。より大きなサンプルスペースには、レガシーオーディオパラメータLAP1のオーディオサウンドのサンプルスペースと比較して、より多様なオーディオサウンドがある。別の説明として、更新されたオーディオパラメータUAP2は、レガシーオーディオパラメータLAP2と比較して異なるリバーブを有している。さらに説明するために、更新されたオーディオパラメータUAP2は、レガシーオーディオパラメータLAP2に基づいて出力されるエコーの量と比較してより多くか、またはより少ないエコーを示す。
別の例として、オーディオパラメータLAP1とUAP1の両方は、オーディオパラメータのタイプの同じ識別子(英数字コードなど)を含む。この例では、オーディオエミュレータ2204は、オーディオパラメータUAP1及びLAP1の両方が同じ識別子を含むとの判定に応答して、更新されたオーディオパラメータUAP1がレガシーオーディオパラメータLAP1に対応すると判定する。GPU924は、画像フレーム2123を送信し、APU931は、音声フレーム2252をディスプレイデバイス410に送信して、画像フレーム2123に従って、かつ、オーディオフレーム2252に基づいたサウンド出力に従って、仮想環境(仮想環境452など)の画像をディスプレイデバイス410上に表示する。例えば、ディスプレイデバイス410のGPUは、ディスプレイデバイス410の発光体を制御して画像フレーム2123に従って画像を表示し、ディスプレイデバイス410のAPUは、ディスプレイデバイス410のスピーカーを制御してオーディオフレーム2252に従ってサウンドを出力する。仮想環境の画像は、レガシーゲームNのプレイを表示するためにディスプレイデバイス410上に表示される。
一実施形態では、オーディオエミュレータ2204を含まないAPU931は、レガシーマシン900(図9A)の構成要素である。例えば、APU931は、メモリデバイス906に結合されている。別の例として、同じオーディオ処理ハードウェアが、レガシーマシン900と更新されたマシン920の両方で使用されている(図9B)。さらに別の例として、APU931は、レガシーAPU910と同じハードウェア及びソフトウェアの仕様を有している。
一実施形態では、CPU922、もしくはGPU924、もしくはAPU931、またはそれらの2つ以上の組み合わせは、基本ブロックコンパイラ104を実行する。
一実施形態では、CPU922、もしくはGPU924、もしくはAPU931、またはそれらの2つ以上の組み合わせは、ブロックディスパッチャ302を実行する。
一実施形態では、更新されたオーディオパラメータは、レガシーオーディオパラメータに対応していない。例えば、更新されたオーディオパラメータUAP1に対応するレガシーオーディオパラメータはない。レガシーオーディオパラメータのいずれかを適用する代わりに、APU931は、更新されたオーディオパラメータUAP1を判定して、レガシーゲームNのオーディオフレーム2252を生成する。
一実施形態では、レガシーAPU904(図9A)は、エミュレートされたPUコード命令1~Mのうちの1つ以上を実行する。エミュレートされたPUコード命令1~Mを実行すると、更新されたオーディオパラメータは生成され得ない。むしろ、レガシーオーディオパラメータが生成される。
一実施形態では、エミュレーションプロセッサシステム409がサーバシステム404(図4B)内に実装されるとき、ディスプレイデバイス410またはHMDなどのクライアントデバイスが使用される。エミュレーションプロセッサシステム409は、コンピュータネットワーク408を介してクライアントデバイスに結合されている。サーバシステム404のNICは、ネットワーク通信プロトコルを更新された画像フレーム2123に適用して、1つ以上のデータパケットを生成し、コンピュータネットワーク408を介してクライアントデバイスにデータパケットを送信する。クライアントデバイスのNICは、ネットワーク通信プロトコルをデータパケットに適用して、データパケットから更新された画像フレーム2123を抽出し、レガシーゲームNの仮想環境の表示のために更新された画像フレーム2123をクライアントデバイスのディスプレイ画面に提供する。
図22B-2は、ブロックディスパッチャ302から出力されたレガシーオーディオフレーム2266からの更新されたオーディオフレーム2252の生成を説明するためのシステム2264の実施形態の図である。システム2264は、ブロックディスパッチャ302及びAPUエミュレータ2204を含む。ブロックディスパッチャ302は、APUエミュレータ2204に結合されている。ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、レガシーオーディオパラメータを含むオーディオフレーム2266を生成する。APUエミュレータ2204は、レガシーオーディオフレーム2266を受信し、レガシーオーディオフレーム2266を解析してレガシーオーディオパラメータを識別し、レガシーオーディオパラメータを更新されたオーディオパラメータに変換して、更新されたオーディオフレーム2252を出力する。
図22C-1は、レガシーオーディオパラメータに基づいて更新されたオーディオフレーム2260を生成するための方法の実施形態を説明するための図である。APU931は、ブロックディスパッチャ302(図3)を実行して、レガシーオーディオパラメータを判定し、レガシーオーディオパラメータに基づいてレガシーオーディオフレームを生成する。APUエミュレータ2204(図22B-1)は、レガシーオーディオフレームからレガシーオーディオパラメータを抽出し、レガシーオーディオフレームのレガシーオーディオパラメータを更新されたオーディオパラメータに変換するなど、エミュレートする。APU931は、更新されたオーディオパラメータを有する更新されたオーディオフレーム2260を生成する。更新されたオーディオフレーム2260は、レガシーゲームNの仮想シーンの画像フレームと共に出力されるものである。例えば、更新されたオーディオフレーム2260は、APU931から送信され、更新された画像フレーム2160(図21D)は、サウンドを有するレガシーゲームNの仮想シーンの画像を表示するために、GPU924からディスプレイデバイス410に送信される。更新されたオーディオフレーム2260は、更新されたオーディオフレーム2252(図22B-1)の1つの一例である。同様の方法で、追加の更新されたオーディオパラメータは、追加のレガシーオーディオパラメータに基づいて判定され、追加の更新されたオーディオパラメータは、更新されたオーディオフレーム2260内に統合される。
図22C-2は、エミュレーションプロセッサシステム409がゲームコンソール402内に実装されているときの、クライアントデバイス2272によるレガシーゲームNのオーディオフレームの処理を説明するためのシステム2270の実施形態の図である(図4A)。クライアントデバイス2272の一例は、ディスプレイデバイス410またはHMDである。クライアントデバイス2272は、デジタル-アナログ変換器(DAC)2274、フィルタ2276、増幅器2278、及びスピーカー2280を含む。DAC2274は、増幅器2278に結合されているフィルタ2276に結合されている。増幅器2278は、スピーカー2280に結合されている。DAC2274はまた、オーディオエミュレータ2204に結合されている。
DAC2274は、オーディオエミュレータ2204から更新されたオーディオフレーム2260を受信する。更新されたオーディオフレーム2260を受信すると、更新されたオーディオフレーム2260のデジタルオーディオデータは、DAC2274によってデジタル形式からアナログ形式に変換されて、アナログオーディオデータを出力する。フィルタ2276は、アナログオーディオデータをフィルタリングして、アナログオーディオデータからのノイズを低減または除去するなどしてフィルタリングし、ノイズが低減されたオーディオデータを出力する。増幅器2278は、ノイズ低減されたオーディオデータの振幅を変更するなどして増幅し、増幅されたオーディオデータを出力する。スピーカー2280は、増幅されたオーディオデータの電気エネルギーをサウンドに変換する。同様の方法で、更新されたオーディオフレーム2252(図22B-2)は、クライアントデバイス2272によって処理される。
一実施形態では、クライアントデバイス2272は、増幅器2278に結合された複数のスピーカーを含む。
一実施形態では、エミュレーションプロセッサシステム409がサーバシステム404(図4B)内に実装されるとき、ゲームコンソール402とディスプレイデバイス410の組み合わせ、もしくはゲームコンソール402とHMDの組み合わせなどの別のクライアントデバイス、またはクライアントデバイス2272が使用される。この実施形態では、サーバシステム404のNICは、オーディオエミュレータ2204から更新されたオーディオフレーム2260を受信し、ネットワーク通信プロトコルを更新されたオーディオフレーム2260に適用して、1つ以上のデータパケットを生成し、コンピュータネットワーク408を介して他のクライアントデバイスにデータパケットを送信する。サーバシステム404のNICは、バス930を介してAPU931に結合されている。他のクライアントデバイスのNICは、データパケットを受信する。一例として、他のクライアントデバイスのNICは、HMDまたはディスプレイデバイス410またはゲームコンソール402内に配置されている。他のクライアントデバイスのNICは、ネットワーク通信プロトコルをデータパケットに適用して、データパケットから更新されたオーディオフレーム2260を取得し、更新されたオーディオフレーム2260をDAC2274に送信する。他のクライアントデバイスのNICはDAC2274に結合されている。
図22C-3は、更新された画像フレーム2123に基づいた画像の表示と、レガシーゲームNの複数の仮想シーンに対して更新されたオーディオフレーム2252に基づいたサウンドの出力との同期を説明するシステム2280の実施形態の図である。システム2280は、APU931、GPU924、及びクライアントデバイス2272を含む。クライアントデバイス2272は、ビデオオーディオ(VA)シンクロナイザ2282、GPU2284、及びディスプレイ画面2286を含む。VAシンクロナイザ2282は、DAC2274に結合され、かつ、GPU2284に結合されており、GPU2284は、ディスプレイ画面2286に結合されている。
エミュレーションプロセッサシステム409が、ゲームコンソール402内に実装されるとき、APU931及びCPU924は、ゲームコンソール402の通信デバイスに結合される。通信デバイスは、オーディオフレーム2252及び画像フレーム2123を受信し、近距離通信プロトコルをフレーム2252及び2123に適用して、1つ以上のデータパケットを生成し、1つ以上のデータパケットをディスプレイデバイス410に送信する。ディスプレイデバイス410は、通信デバイスを含み、これは、1つ以上のデータパケットを受信し、近距離通信プロトコルをデータパケットに適用して、フレーム2252及び2123を抽出する。ディスプレイデバイス410の通信デバイスは、フレーム2252及び2123をVAシンクロナイザ2282に送信する。
VAシンクロナイザ2282は、画像フレーム2123の表示順序をオーディオフレーム2252の表示順序と同期させる。例えば、VAシンクロナイザ2282は、更新されたオーディオフレーム2260内に埋め込まれた第1の時間識別子、及び更新された画像フレーム2160内に埋め込まれた第2の時間識別子に基づいて、更新されたオーディオフレーム2260及び更新された画像フレーム2160が、同時に出力されていることを判定する。説明として、VAシンクロナイザ2282は、第1の時間識別子が、第2の時間識別子と一致することを判定して、更新されたオーディオフレーム2260と更新された画像フレーム2160が同時に出力されていることを判定する。また、この説明では、第1及び第2の識別子の各々は、英数字コードである。この説明では、第1の時間識別子はAPU931によって生成されており、第2の時間識別子はGPU924によって生成されている。また、この説明では、APU931とGPU924の両方が、同じクロック信号に基づいて第1と第2の時間識別子を生成する。さらに説明すると、クロック信号は、APU931によって生成されてGPU924に送信されるか、またはGPU924によって生成されてAPU931に送信されるか、またはクロックソースによって生成されてAPU931及びGPU924に送信される。クロックソースの一例はインターネットである。
VAシンクロナイザ2282は、画像フレーム2123と2252と同期させた後、画像フレーム2123をGPU2284に出力し、オーディオフレーム2252をDAC2274に出力する。例えば、VAシンクロナイザ2282は、更新されたオーディオフレーム2260をDAC2274に提供すると同時に、更新された画像フレーム2160をGPU2284に提供する。GPU2284は、ディスプレイ画面2286の表示ピクセルを制御して、画像フレーム2123に従って、レガシーゲームNの複数の仮想シーンの画像を表示する。また、オーディオフレーム2252は、レガシーゲームNの複数の仮想シーンの画像の表示と同期してサウンドを出力するために、更新されたオーディオフレーム2260が処理されるのと同じ方法で、DAC2274、フィルタ2276、増幅器2278、及びスピーカー2280(図22C-2)によって処理される。
一実施形態では、エミュレーションプロセッサシステム409がサーバシステム404(図4B)内に実装されるとき、オーディオフレーム2252は、APU931からサーバシステム404のNICに送信される。APU931及びGPU924は、サーバシステム404のNICに結合されている。また、画像フレーム2123は、GPU924からサーバシステム404のNICに送信される。サーバシステム404のNICは、ネットワーク通信プロトコルをフレーム2123及び2252に適用して、1つ以上のパケットを生成し、コンピュータネットワーク408(図4B)を介して図22C-2を参照して上で説明した他のクライアントデバイスにパケットを送信する。他のクライアントデバイスのNICは、ネットワーク通信プロトコルを1つ以上のパケットに適用して、パケットからフレーム2252及び2123を抽出する。他のクライアントデバイスのNICは、図22C-3を参照して上で説明したのと同じ方法でフレーム2252及び2123を処理するために、フレーム2252及び2123をVAシンクロナイザ2282に送信する。
図22Dは、レガシーモード及び通常モードを表示するためのディスプレイデバイス410の実施形態の図である。ユーザ1は、ハンドヘルドコントローラ414を操作して、ユーザ入力を生成する。レガシーゲームNのプレイ前またはプレイ中にユーザ入力を受信すると、GPU924は、画像フレームを生成し、画像フレームをディスプレイデバイス410に送信する。ディスプレイデバイス410は、画像フレームに基づいて、レガシーモードの選択を受信するためのアイテム2292、及び通常モードの選択を受信するためのアイテム2294を含む画像2290を表示する。ユーザ1が、ハンドヘルドコントローラ414を操作してアイテム2292を選択すると、GPU924は、更新されたグラフィックパラメータに基づいて画像フレーム2123(図21B-1)を生成する。一方で、ユーザ1が、ハンドヘルドコントローラ414を操作してアイテム2294を選択すると、GPU924は、レガシーグラフィックパラメータに基づいて画像フレーム422(図4B)を生成する。
図23は、メニュー2302が表示される仮想環境2300を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2300は、仮想環境2300がメニュー2302を含むことを除いて、仮想環境452(図4B)と同じである。メニュー2302は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。
メニュー2302は、X位置、Y位置、アップスケール係数、及びアスペクト比などの複数の更新されたグラフィックパラメータを含む。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2302内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、X位置を選択して、仮想環境452のディスプレイデバイス410のディスプレイ画面の水平レベルに対する位置を変更する。別の例として、ユーザ1は、Y位置を選択して、ディスプレイデバイス410のディスプレイ画面の垂直レベルに対する仮想環境452の位置を変更する。ディスプレイ画面の水平レベルは垂直レベルに垂直である。説明すると、水平レベルはx軸に沿っており、垂直レベルはy軸に沿っている。別の例として、ユーザ1はアップスケール係数を選択して、更新されたアップスケール係数を変更する。さらに別の例として、ユーザ1は、アスペクト比を選択して、ディスプレイデバイス410のディスプレイ画面上で仮想環境452の高さと仮想環境452の幅との比を変更する。高さはディスプレイ画面の垂直レベルに沿って測定され、幅はディスプレイ画面の水平レベルに沿って測定される。
一実施形態では、メニュー2302は、メニュー2302内に表示される更新されたグラフィックパラメータの各々についてのスライディングスケールを含む。ユーザ1は、ハンドヘルドコントローラ414を使用して、メニュー2302の更新されたグラフィックパラメータのうちの1つの対応するスライディングスケールのスライダをスライドさせて、更新されたグラフィックパラメータのレベルまたは量を選択する。
図24Aは、メニュー2402が表示される仮想環境2400を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2400は、仮想環境2400がメニュー2402を含むことを除いて、仮想環境452(図4B)と同じである。メニュー2402は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。
メニュー2402は、スキャンラインを有効にする、スキャンライン深度、スキャンライン幅、スキャンライン輝度、ディザ深度、などの複数の更新されたグラフィックパラメータを含む。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2402内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、「スキャンラインを有効にする」を選択して、仮想環境452の上にスキャンラインをオーバーレイする。「スキャンラインを有効にする」オプションの選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用してスキャンラインをオーバーレイする。別の例として、ユーザ1は、「スキャンライン深度」を選択して、各「スキャンラインオーバーレイド」の深度を変更するか、または仮想環境452上にオーバーレイさせる。スキャンラインの深さは、ディスプレイデバイス410のディスプレイ画面の水平レベルに沿っている。説明すると、スキャンラインの深度は、x軸とy軸の両方に垂直なz軸に沿っている。別の例として、ユーザ1は、スキャンライン幅を選択して、各「スキャンラインオーバーレイド」の幅を変更するか、仮想環境452上にオーバーレイさせる。スキャンラインの幅は、ディスプレイデバイス410のディスプレイ画面の垂直レベルに沿っている。さらに別の例として、ユーザ1は、「スキャンライン輝度」を選択して、スキャンラインオーバーレイドの輝度の量を変更するか、仮想環境452上にオーバーレイさせる。スキャンラインの輝度変更の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して輝度のレベルを変更する。さらに別の例として、ユーザ1は、ディザ深度を選択し、ノイズを追加して、スキャンライン生成における量子化誤差を低減する。量子化誤差は、量子化をランダム化することによって低減される。ハンドヘルドコントローラ414からディザ深度の変更の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、スキャンラインを生成するためのディザ深度のレベルを変更する。説明すると、GPUエミュレータ2122は、第2のサンプリングレートよりも小さい第1のサンプリングレートでスキャンラインを生成するためにデータをサンプリングする。第2のサンプリングレートはまた、スキャンラインを生成するためのデータのサンプリングのためのものでもある。第1のサンプリングレートが適用されるとき、サンプリングから出力される第1の量のサンプルポイントは、第2のサンプリングレートから出力される第2の量のサンプリングポイントと比較して低くなっている。説明すると、第1のサンプリングレートは、ナイキストサンプリングレートよりも低くなっている。GPUエミュレータ2122は、ノイズを増加させるために、ディザ深度の一定量を第1の量のサンプリングポイントに適用し、それによって、スキャンラインがより顕著であるようにする。スキャンラインは、ディザ深度が適用されていない場合に比べてより顕著である。
一実施形態では、メニュー2402は、メニュー2402内に表示される更新されたグラフィックパラメータの各々についてのスライディングスケールを含む。ユーザ1は、ハンドヘルドコントローラ414を使用して、メニュー2402の更新されたグラフィックパラメータのうちの1つの対応するスライディングスケールのスライダをスライドさせて、更新されたグラフィックパラメータのレベルまたは量を選択する。
図24Bは、スキャンライン2412A、スキャンライン2412B、及びスキャンライン2412Cなどの複数のスキャンライン2412を有する仮想環境2410を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2410は、仮想環境2410がスキャンライン2412を含むことを除いて、仮想環境452(図4B)と同じである。スキャンライン2412の各々は、仮想環境452の画像の左エッジ2414から仮想環境452の画像の右エッジ2416まで延在している。例えば、各スキャンライン2412は水平である。左エッジ2414は、仮想環境452の画像の上部エッジ2418に対して、かつ、仮想環境452の画像の下部エッジ2420に対して垂直である。
一実施形態では、スキャンライン2412の代わりに、垂直に向けられたスキャンラインが生成され、仮想環境452上にオーバーレイされる。例えば、垂直に向けられたスキャンラインは、上部エッジ2418から下部エッジ2420まで延在している。垂直に向けられたスキャンラインは、ディスプレイデバイス410上に表示するためにGPU924によって生成される。
図25Aは、メニュー2502が表示される仮想環境2500を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2500は、仮想環境2500がメニュー2502を含むことを除いて、仮想環境452(図4B)と同じである。メニュー2502は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。
メニュー2502は、輝度、コントラスト、ガンマ、色相、彩度などの複数の更新されたグラフィックパラメータを含む。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2402内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、仮想環境452の画像ピクセルの輝度を増減するなど、変更する輝度を選択する。「輝度」の選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して輝度を変更する。別の例として、ユーザ1は、仮想環境452の仮想背景と比較して、仮想環境452の仮想オブジェクトのコントラストを変更するために「コントラスト」を選択する。別の例として、ユーザ1は、ガンマを選択して、仮想環境452の画像において色がどれだけ速く変化するかについての指標を提供する。ガンマの選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、より高いか、またはより低い周波数で色を変更する。さらに別の例として、ユーザ1は、色相を選択して、仮想環境452を満たす色を変更する。スキャンライン輝度の変更の指示を受信すると、GPU924は、仮想環境452の画像ピクセルを生成するために使用される色の量にGPUエミュレータ2122を適用する。説明すると、GPUエミュレータ2122は、赤、青、緑、及び黄色を含む第1の色相を、赤、青、緑、オレンジ、及び黄色を含む第2の色相に変更する。さらに別の例として、ユーザ1は、彩度を選択して、仮想環境452の各画像ピクセルの色の強度または純度の量を変更する。色の彩度が増すと、色はより純粋に見える。彩度が低下すると、色が灰色に置き換わったように見える。
一実施形態では、メニュー2502は、メニュー2502内に表示される更新されたグラフィックパラメータの各々についてのスライディングスケールを含む。ユーザ1は、ハンドヘルドコントローラ414を使用して、メニュー2502の更新されたグラフィックパラメータのうちの1つの対応するスライディングスケールのスライダをスライドさせて、更新されたグラフィックパラメータのレベルまたは量を選択する。
図25Bは、メニュー2512が表示される仮想環境2510を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2510は、仮想環境2510がメニュー2512を含むことを除いて、仮想環境452(図4B)と同じである。メニュー2512は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。
メニュー2512は、セルシェーダによって適用されるシェーディングレベル、セルシェーダによって適用される彩度、セルシェーダによって適用される輝度、セルシェーダによって適用される輪郭、セルシェーダによって適用される強度、及びセルシェーダによって適用されるスムーズ、などの複数の更新されたグラフィックパラメータを含む。セルシェーダは、GPUエミュレータ2122の一例である(図B)。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2512内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、仮想環境452内の仮想オブジェクトの輪郭(周囲または境界など)の画像ピクセルのシェーディングの量を増加または減少など、変更するためにシェーディングレベルを選択する。説明すると、仮想オブジェクトは、ハンドヘルドコントローラ414を介してユーザ1によって制御される仮想キャラクタである。さらに説明すると、仮想オブジェクトは戦闘機である。シェーディングは、輪郭の色または色の強度を変更する。例として、仮想シーン内の仮想オブジェクトのアウトラインは、仮想オブジェクトを他の仮想オブジェクト及び仮想シーン内の仮想背景から区別する。シェーディングレベルのオプションの選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、仮想オブジェクトの輪郭のシェーディングレベルを変更する。別の例として、ユーザ1は、彩度を選択して、仮想環境452の仮想オブジェクトの輪郭の各画像ピクセルの色の強度または純度の量を変更(増加させる、または減少させるなど)する。彩度のオプションの選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、仮想オブジェクトの輪郭の各画像ピクセルの色の強度または純度の量を変更する。
別の例として、ユーザ1は、輝度を選択し、仮想環境452内の仮想オブジェクトの輪郭の画像ピクセルの輝度を変更する(増加させる、または減少させるなど)。彩度のオプションの選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、仮想オブジェクトの輪郭の画像ピクセルの輝度を変更する。
さらに別の例として、ユーザ1は、アウトラインを選択して、仮想環境で仮想オブジェクトの輪郭を生成するかどうかを示す。輪郭の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、仮想オブジェクトの輪郭を含める。輪郭は、仮想オブジェクトの周囲を形成し、仮想オブジェクトの境界を対比して、仮想オブジェクトの仮想背景から、及び仮想環境452内の他の仮想オブジェクトから仮想オブジェクトを区別する。さらに別の例として、ユーザ1は、強度を選択して、仮想環境452内の仮想オブジェクトの輪郭の透明度量を変更する。輪郭の透明度が低下すると、輪郭は不透明に見え、透明度が増加すると、輪郭は透明に見える。このようにして、輪郭は不透明から半透明に、さらに透明に切り替わるか、またはその逆に切り替わる。輪郭の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、仮想環境452内の仮想オブジェクトの輪郭の透明度量を変更する。
別の例として、ユーザ1は、スムーズを選択し、仮想環境452内の仮想オブジェクトの輪郭の画像ピクセルの平滑性の量を(増加させる、または減少させるなど)変更する。説明すると、平滑性は、輪郭の画像ピクセルの数を増やすことによって増加し、輪郭の画像ピクセルの数を減らすことによって減少する。スムーズのオプションの選択の指示を受け取ると、GPU924は、GPUエミュレータ2122を適用して、仮想オブジェクトの輪郭の画像ピクセルの平滑性を変更する。
一実施形態では、メニュー2512は、メニュー2512内に表示される更新されたグラフィックパラメータの各々についてのスライディングスケールを含む。ユーザ1は、ハンドヘルドコントローラ414を使用して、メニュー2512の更新されたグラフィックパラメータのうちの1つの対応するスライディングスケールのスライダをスライドさせて、更新されたグラフィックパラメータのレベルまたは量を選択する。
図25Cは、メニュー2522及びメニュー2524が表示される仮想環境2520を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2520は、仮想環境2520がメニュー2522及び2524を含むことを除いて、仮想環境452(図4B)と同じである。メニュー2522及び2524は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。
メニュー2522は、ビデオフィルタのタイプ1及びビデオフィルタのタイプ2などの複数の更新されたグラフィックパラメータを含む。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2522内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、仮想環境452の画像ピクセルに適用されるタイプ1フィルタまたはタイプ2フィルタを選択する。タイプ1フィルタの説明は、Mitchell Netravali(登録商標)フィルタであり、タイプ2フィルタの説明は、Butterworth(登録商標)フィルタである。ビデオフィルタのフィルタタイプの他の説明には、Chebyshev(登録商標)及びBessel(登録商標)が含まれる。ビデオフィルタのタイプ1またはタイプ2の選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、ビデオフィルタのタイプを適用して、レガシーゲームNの、仮想オブジェクトの画像ピクセル、または仮想背景の画像ピクセル、またはそれらの組み合わせを生成する。
同様に、メニュー2524は、アンチエイリアシングフィルタのタイプ1、及びアンチエイリアシングフィルタのタイプ2、などの複数の更新されたグラフィカルパラメータを含む。ユーザ1は、ハンドヘルドコントローラ414を操作して、メニュー2524内に表示される更新されたグラフィックパラメータのうちの1つ以上を選択する。例えば、ユーザ1は、仮想環境452の画像ピクセルに適用されるタイプ1フィルタまたはタイプ2フィルタを選択する。タイプ1フィルタの説明は、FXAA(登録商標)フィルタであり、タイプ2フィルタの説明は、Line Thickness(登録商標)フィルタである。アンチエイリアシングフィルタのタイプ1またはタイプ2の選択の指示を受信すると、GPU924は、GPUエミュレータ2122を適用して、アンチエイリアシングフィルタのタイプを適用して、レガシーゲームNの、仮想オブジェクトの画像ピクセル、または仮想背景の画像ピクセル、またはそれらの組み合わせを生成する。
一実施形態では、各メニュー2522及び2524は、メニュー内に表示される更新されたグラフィックパラメータのそれぞれについてのスライディングスケールを含む。ユーザ1は、ハンドヘルドコントローラ414を使用して、メニュー2522または2524の更新されたグラフィックパラメータのうちの1つの対応するスライドスケールのスライダをスライドさせて、更新されたグラフィックパラメータのレベルまたは量を選択する。
図25Dは、十字線2532が表示されている仮想環境2530を表示するためのディスプレイデバイス410の実施形態の図である。仮想環境2532は、仮想環境2532が十字線2532を含むことを除いて、仮想環境452(図4B)と同じである。十字線2532は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414(図4B)からユーザ入力が受信されたときに、ディスプレイデバイス410のGPUによって表示される。例えば、ユーザ入力は十字線2532のサイズを示す。
ユーザ1は、ハンドヘルドコントローラ414を使用して、レガシーゲームNを一時停止する。レガシーゲームNが一時停止されると、ユーザ1は、ハンドヘルドコントローラ414を操作して、十字線2532のサイズが変更されるべきであるという指示を含むユーザ入力を生成する。十字線のサイズは、更新されたグラフィカルパラメータの一例である。指示を受信すると、GPU924はGPUエミュレータ2122(図21B-1)を適用して、ユーザ入力を介して受信したサイズと一致するように十字線2532のサイズを変更する。
図26は、事前(AoT)プロセッサシステム2600の実施形態の図である。AoTプロセッサシステム2600は、コンパイルされたコードジェネレータ(CCG)2601と、ランタイムコンポーネント2603と、を含む。CCG2601は、スキャナ2602、デコーダ及びトランスレータ2604、ならびにコンパイラ2606を含む。ランタイムコンポーネント2603には、ファイバクリエータ2608、スイッチ2610、及びAoTエグゼキュータ2612が含まれる。一例として、AoTコンパイルでは、エミュレートされたPUコード106の実行可能部分は、実行前にコンパイルされる。このように、実行中にエミュレートされたPUコード106の実行可能部分をコンパイルする必要はなく、時間が節約される。
一例として、スキャナ2602、デコーダ及びトランスレータ2604、及びコンパイラ2606の各々は、ホストコンピュータのホストCPUなどのホストプロセッサ内に実装されている。説明すると、スキャナ2602、デコーダ及びトランスレータ2604、及びコンパイラ2606の各々は、ホストプロセッサによって実行されるコンピュータプログラムである。別の例として、スキャナ2602、デコーダ及びトランスレータ2604、ならびにコンパイラ2606の各々は、ASICまたはPLDまたはマイクロコントローラなどのホストハードウェア構成要素である。ホストコンピュータの例には、サーバシステム404(図4A)の1つ以上のサーバ、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、及びタブレットが含まれる。説明すると、デスクトップコンピュータまたはラップトップコンピュータは、サーバシステム404の一部である。ホストコンピュータとホストコンピューティングデバイスという用語は、本明細書では互換的に使用され、ホストプロセッサとホスト処理装置という用語は、本明細書では互換的に使用されることに留意されたい。
一例として、ファイバクリエータ2608、スイッチ2610、及びAoTエグゼキュータ2612の各々は、CPU922(図9B)内に実装されている。説明すると、ファイバクリエータ2608、スイッチ2610、及びAoTエグゼキュータ2612の各々は、CPU922によって実行されるコンピュータプログラムである。別の例として、AoTエグゼキュータ2612は、CPU922、GPU924(図9B)、またはそれらの組み合わせの中に実装されている。説明すると、CPU922が、GPU924に画像フレーム422を生成するように命令するときに、AoTエグゼキュータ2612は実装される(図4A)。別の例として、ファイバクリエータ2608、スイッチ2610、及びAoTエグゼキュータ2612の各々は、ゲームコンソール402(図4A)内に実装されるASICまたはPLDまたはマイクロコントローラなどのハードウェア構成要素である。
スキャナ2602は、コンパイラ2606に結合されているデコーダ及びトランスレータ2604に結合されている。コンパイラ2606は、ファイバクリエータ2608に結合されており、ファイバクリエータ2608は、スイッチ2610に結合されている。スイッチ2610は、AoTエグゼキュータ2612に結合されている。
スキャナ2602は、レガシーゲームNのすべての実行可能機能に対してエミュレートされたPUコード106をスキャンして、スキャンされた機能を出力する。例えば、スキャナ2602は、メモリデバイス412(図6C)からエミュレートされたPUコード106にアクセスし、エミュレートされたPUコード106の各行を解析またはトラバースして、画像フレーム422を生成するために実行されることができる実行可能関数などの演算である、エミュレートされたPUコード106の部分を識別し、この部分を、データであるエミュレートされたPUコード106の他の部分から区別する。この例では、データ自体は、画像フレーム422を生成するために実行されることはできない。別の例として、データは、ユーザ入力420(図4B)をそれ自体で処理できないが、ユーザ入力418を処理してレガシーゲームNのプレイを開始することができる。むしろ、この例では、実行可能関数は、データを適用して、ユーザ入力418または420を処理する。説明すると、スキャナ2602は、エミュレートされたPUコード106をスキャンして、レガシーゲームNのすべての可能な仮想オブジェクトの動き(位置及び向きなど)を識別し、レガシーゲームNのすべての可能な仮想背景の動き(位置及び向きなど)を識別する。この説明では、識別された仮想オブジェクトと仮想背景の動きは、レガシーゲームNのプレイ中にAoTエグゼキュータ2612によって受信されるとスキャナ2602によって予想されるユーザ入力420(図4A)などのユーザ入力に応答している。エミュレートされたPUコード106の実行可能機能の説明には、書き込み操作、読み取り操作、ジャンプ操作、及びロード操作などの操作が含まれる。
エミュレートされたPUコード106のデータの例には、画像データ及びオーディオデータが含まれる。説明すると、画像データは、アニメーションのアイコンまたはルックアンドフィールである。別の例として、画像データは、レガシーゲームNの仮想オブジェクト及び仮想背景の色及び強度などのグラフィックデータである。別の説明として、オーディオデータは、サウンドが画像データとともに出力されることを可能にする。さらに説明するために、オーディオデータは処理され、レガシーゲームNの1つ以上の仮想オブジェクトからサウンドを出力するか、またはレガシーゲームNの1つ以上の仮想背景と共にサウンドを出力する。
スキャナ2602は、実行可能機能などのスキャンされた機能をデコーダ及びトランスレータ2604に送信する。例えば、スキャナ2602は、データをデコーダ及びトランスレータ2604に提供しない。
デコーダ及びトランスレータ2604は、スキャナ2602から出力されたスキャンされた機能を復号化し、C++ソースコード、Python(登録商標)ソースコード、またはJava(登録商標)ソースコードなどの第1のソースコードに変換する。例えば、デコーダ及びトランスレータ2604は、スキャンされた機能が、アセンブリ言語プログラムの読み取り及び書き込み操作を含むことを識別するなどして復号化し、読み取り及び書き込み操作をタイトルの読み取り及び書き込みを有する機能に変換する。タイトルの読み取り及び書き込みを有する機能は、本明細書では、読み取り及び書き込み機能と呼ばれることがある。読み取り及び書き込み機能は、読み取り及び書き込み機能を実行するためのデータが格納されており、読み取り及び書き込み操作を実行するための操作をさらに含んでいるホストコンピュータ内のホストメモリデバイスのメモリ場所を識別する。ホストメモリデバイスは、ホストプロセッサに結合されている。スキャンされた機能は、エミュレートされたPUコード106の操作を識別するために復号化され、次いで第1のソースコードに変換される。
コンパイラ2606は、デコーダ及びトランスレータ2604から第1のソースコードを受信する。さらに、コンパイラ2606は、ホスト入力デバイスから第2のソースコードを受信する。例えば、プログラマは、ホスト入力デバイスを介してホストプロセッサに第2のソースコードを提供する。ホスト入力デバイスの例には、キーボード、マウス、スタイラス、タッチパッド、またはそれらの組み合わせなどのホスト周辺機器が含まれる。ホスト入力デバイスは、ホストコンピュータの一部であり、ホストコンピュータのホストプロセッサに結合されている。第2のソースコードの例には、画像フレーム422の1つを周期的な時間間隔でリフレッシュするためのソースコード、またはオーディオフレームから周期的な時間間隔で生成されるサウンドをリフレッシュするためのソースコード、またはそれらの組み合わせが含まれる。画像フレーム422のうちの1つをリフレッシュするための周期的な時間間隔の例は、ディスプレイデバイス410またはHMD上での画像フレーム422の表示のフレームレートが、毎秒60フレームであるときの16ミリ秒の期間である。コンパイラ2606は、第1及び第2のソースコードを受信し、第1のソースコードを第1のコンパイルされたコードにコンパイルし、第2のソースコードを第2のコンパイルされたコードにコンパイルする。第1のコンパイルされたコードまたは第2のコンパイルされたコードの例は、オブジェクトコードである。
レガシーゲームNのプレイ期間を含むAoTランタイム中に、ファイバクリエータ2608は、コンパイラ2606から第1及び第2のコンパイルされたコードを受信し、第1及び第2のコンパイルされたコードからファイバを作成する。一例として、ファイバは、CPU922による、第1のコンパイルされたコードの1つ以上の部分と、第2のコンパイルされたコードの1つ以上の部分の実行順序である。ファイバクリエータ2608は、ファイバをキャッシュ102内に格納する。
スイッチ2610は、AoTランタイム中に実行される。スイッチ2610が実行されると、実行は、第1のコンパイルされたコードの1つ以上の部分から第2のコンパイルされたコードの1つ以上の部分に、またはその逆に変化させる。AoTエグゼキュータ2602が実行されると、第1及び第2のコンパイルされたコードは、ファイバに加えてCPU922によって実行され、レガシーゲームNの画像フレーム422を出力する。一例として、CPU922は、AoTエグゼキュータ2612を実行して、GPU924に画像フレーム422を生成するように命令する。
一実施形態では、デコーダ及びトランスレータ2604の代わりに、別個のデコーダ及び別個のトランスレータが使用される。例えば、デコーダはトランスレータとは別個のコンピュータプログラムである。別の例として、デコーダは、ASICなどの別個の集積回路、またはトランスレータからの別個のPLDである。
図27は、第1及び第2のコンパイルされたコードを含む、コンパイルされたコードセット2702の生成を説明するためのシステム2700の実施形態の図である。システム2700は、ホストプロセッサ2704及びメモリデバイス2706を含む。一例として、ホストプロセッサ2704は、サーバシステム404(図4B)に結合されている。説明すると、ホストコンピュータは、コンピュータネットワーク408(図4B)を介してサーバシステム404に結合されている。ホストプロセッサ2704は、ホストコンピュータのプロセッサである。メモリデバイス2706の例は、CD-ROMドライブ908によって読み取り可能であるCD-ROMを含む。メモリデバイス2706は、レガシーゲームNのエミュレートされたPUコード106を格納する。
ホストプロセッサ2704は、メモリデバイス2706に結合されている。スキャナ2602(図26)は、ホストプロセッサ2704によって実行され、メモリデバイス2706からエミュレートされたPUコード106をスキャンする。例えば、エミュレートされたPUコード106は、メモリデバイス2706からホストプロセッサ2704によって読み取られ、エミュレートされたPUコード106の実行可能機能をエミュレートされたPUコード106のデータから区別して、スキャンされた機能を出力する。ホストプロセッサ2704は、デコーダ及びトランスレータ2604(図26)を実行して、スキャンされた機能を復号化し、第1のソースコードに変換する。第1のソースコードは、デコーダ及びトランスレータ2604からコンパイラ2606(図26)に提供される。
また、軽量エミュレータプログラムなどの第2のソースコードは、ホスト入力デバイスからコンパイラ2606によって受信される。ホストプロセッサ2704は、コンパイラ2606を実行して、第1及び第2のソースコードをコンパイルされたコードセット2702にコンパイルする。一例として、コンパイルされたコードセット2702は、複数のネイティブライブラリを含み、各ネイティブライブラリは、コンパイルされたコードセット2702の部分を格納するための1つ以上のファイルを含む。この例では、コンパイルされたコードセット2702は非実行可能プログラムである。説明すると、コンパイルされたコードセット2702は、自動的に動作または実行しない。この説明では、コンパイルされたコードセット2702は、ユーザ入力418または420などのユーザ入力が受信されたときに実行する。
一実施形態では、ネイティブライブラリは、第2のコンパイルされたコードを含まない。
図28は、コンピュータスレッドなどのファイバ2802を説明するためのシステム2800の実施形態の図である。ファイバ2802の一例は、第1及び第2のコンパイルされたコードのシーケンスまたは一連の実行、ならびに第1及び第2のコンパイルされたコードの実行の間に実行される操作である。ファイバ2802は、システム2800において破線で示されている。システム2800は、コンパイルされたコード(CC)1及びコンパイルされたコード2を含む。一例として、コンパイルされたコード1は、レガシーゲームNの第1のソースコードからコンパイルされた第1のコンパイルされたコードであり、コンパイルされたコード2は、第2のソースコードからコンパイルされた第2のコンパイルされたコードである。
コンパイルされたコード1は、開始アドレスと終了アドレスを有する。コンパイルされたコード1の開始アドレスは、コンパイルされたコード1の開始の指示が格納されるキャッシュ102(図1)内の場所である。例えば、コンパイルされたコード1の開始アドレスは、コンパイルされたコード1の名前または英数字の識別子などの開始識別子が格納されるアドレスである。コンパイルされたコード1の終了アドレスは、コンパイルされたコード1の終了の指示が格納されるキャッシュ102内の場所である。例えば、コンパイルされたコード1の終了アドレスは、コンパイルされたコード1の名前または英数字の識別子などの終了識別子が格納されるアドレスである。
同様に、コンパイルされたコード2は、開始アドレスと終了アドレスを有する。コンパイルされたコード2の開始アドレスは、コンパイルされたコード2の開始の指示が格納されるキャッシュ102内の場所である。例えば、コンパイルされたコード2の開始アドレスは、コンパイルされたコード2の名前または英数字の識別子などの開始識別子が格納されるアドレスである。コンパイルされたコード2の終了アドレスは、コンパイルされたコード2の終了の指示が格納されるキャッシュ102内の場所である。例えば、コンパイルされたコード2の終了アドレスは、コンパイルされたコード2の名前または英数字の識別子などの終了識別子が格納されるアドレスである。
コンパイルされたコード1は、レガシーゲームNのコンパイルされたコード部分1(CCP1)、CCP2、CCP3などの複数の部分を含む。コンパイルされたコード部分CCP1の一例は、レガシーゲームNのアニメーションであり、アニメーションは、レガシーゲームNをユーザ1に紹介する。説明すると、アニメーションは、ユーザ入力418(図4A)が、ハンドヘルドコントローラ414(図4A)から受信されたときに、レガシーゲームNのタイトルGN、1つ以上の画像、及びレガシーゲームNの紹介のオーディオを提供する。コンパイルされたコード部分CCP2の例は、レガシーゲームNのプレイ中のユーザ入力420(図4A)に応答したレガシーゲームNの仮想オブジェクト454(図4B)の動きを含む。コンパイルされたコード部分CCP3の例は、仮想オブジェクト454の上向きの動きまたは下向きの動きなどの動きを含む。この例では、仮想オブジェクト454は、ユーザ入力420を受信することなく移動する。説明すると、仮想オブジェクト454は、レガシーゲームN内で自動的に移動し、この移動は、ユーザ入力420を必要としない。
コンパイルされたコード2の例には、レガシーゲームNのイメージの周期的なリフレッシュが含まれている。説明すると、ディスプレイデバイス410(図4A)またはHMDに表示された画像または画像フレームは、ディスプレイデバイス410またはHMDが画像または画像フレームを保持する能力を有さないためにリフレッシュされる。この説明では、GPU924(図9B)は、ディスプレイデバイス410またはHMDのLCD素子またはLEDなどの光源を制御して、ディスプレイデバイス410のディスプレイ画面またはHMDのディスプレイ画面全体にわたり光源を定期的に掃引し、画像または画像フレームを再描画する。この説明では、GPU924は、ディスプレイデバイス410またはHMDの1つ以上のトランジスタなどの複数のディスプレイドライバに制御信号を提供することによって光源を制御する。この説明では、各ディスプレイドライバは、対応する光源に結合されて、対応する光源を制御する。また、この説明では、各ディスプレイドライバがGPU924に結合されている。さらにこの説明では、制御信号の受信に応答して、ディスプレイドライバは、対応する光源をオンまたはオフにして、画像を再描画する。またこの説明では、ディスプレイドライバは、ディスプレイデバイス410またはHMDのディスプレイコントローラの一部である。別の説明として、コンパイルされたコード2は、周期的リフレッシュ画面を含み、これは、毎16ミリ秒(ミリ秒)など、レガシーゲームNの画像を周期的にリフレッシュする。この説明では、画像は、コンパイルされたコード1のコンパイルされたコード部分の実行に基づいて生成される。さらに、この説明では、コンパイルされたコード1のコンパイルされたコード部分は、AoTエグゼキュータ2612によるコンパイルされたコード2の実行以前に、AoTエグゼキュータ2612(図26)によって実行される。さらに説明すると、コンパイルされたコード2は、コンパイルされたコード部分CCP2がAoTエグゼキュータ2612によって実行されるときに生成される画像を定期的にリフレッシュする。
コンパイルされたコード2の別の例は、レガシーゲームNのオーディオフレームから生成されたサウンドの定期的なリフレッシュを含む。説明すると、ディスプレイデバイス410のスピーカー(図4A)またはHMDのスピーカーを介したサウンド出力は、ディスプレイデバイス410のスピーカーまたはHMDのスピーカーが、サウンドを表す電気エネルギーを保持する容量を有さないためにリフレッシュされる。この説明では、CPU922(図9B)は、ディスプレイデバイス410のスピーカーまたはHMDのスピーカーを制御して、スピーカーによってサウンドに変換される電気エネルギーを周期的にリフレッシュして、サウンドをリフレッシュする。この説明では、CPU924は、ディスプレイデバイス410またはHMDのDAC2274、フィルタ2276、及び増幅器2278(図22C-2)の組み合わせなどのオーディオドライバに制御信号を提供することによって、ディスプレイデバイス410またはHMDのスピーカーを制御する。この説明では、オーディオドライバがCPU922に結合されている。さらにこの説明では、制御信号の受信に応答して、オーディオドライバはサウンドを再出力する。また、この説明では、オーディオドライバは、ディスプレイデバイス410またはHMDのオーディオコントローラの一部である。別の例として、コンパイルされたコード2は、サウンドの周期的なリフレッシュを含み、これは、レガシーゲームNの画像と共に出力されるサウンドを周期的にリフレッシュする。この説明では、コンパイルされたコード2は、コンパイルされたコード1のコンパイルされたコード部分の実行に基づいて生成されたレガシーゲームNのサウンドを周期的にリフレッシュする。さらに、この説明では、コンパイルされたコード1のコンパイルされたコード部分は、AoTエグゼキュータ2612によるコンパイルされたコード2の実行以前に、AoTエグゼキュータ2612(図26)によって実行される。さらに説明すると、コンパイルされたコード2は、コンパイルされたコード部分CCP2がAoTエグゼキュータ2612によって実行されるときに生成されるサウンドを定期的にリフレッシュする。別の説明として、コンパイルされたコード2は、周期的リフレッシュサウンドを含み、これはレガシーゲームNのサウンドを周期的にリフレッシュする。この説明では、コンパイルされたコード2は、コンパイルされたコード1のコンパイルされたコード部分の実行に基づいて生成されたレガシーゲームNのサウンドを周期的にリフレッシュする。さらに、この説明では、コンパイルされたコード1のコンパイルされたコード部分は、AoTエグゼキュータ2612によるコンパイルされたコード2の実行以前に、AoTエグゼキュータ2612(図26)によって実行される。さらに説明すると、コンパイルされたコード2は、コンパイルされたコード部分CCP2がAoTエグゼキュータ2612によって実行されるときに生成されるサウンドを周期的にリフレッシュする。
ファイバ2802は、AoTエグゼキュータ2612によって実行されると、コンパイルされたコード1の開始アドレスで始まるコンパイルされたコード部分CCP1の実行を指示する。例えば、AoTエグゼキュータ2612は、ユーザ入力418が、ハンドヘルドコントローラ414(図4A)から受信されるかどうかを判定する。この例では、ユーザ入力418が受信されたと判定すると、AoTエグゼキュータ2612は、コンパイルされたコード1のコンパイルされたコード部分CCP1を実行する。説明すると、コンパイルされたコード部分CCP1が実行されると、ゲームタイトルGNを有するレガシーゲームNのアニメーションを有する1つ以上の画像フレームが、ディスプレイデバイス410(図4A)またはHMDに表示される。
コンパイルされたコード部分CCP1が実行されると、AoTエグゼキュータ2612は、ユーザ入力420(図4A)が入力プロセッサシステム407(図4A)から受信されるかどうかを判定する。ユーザ入力420が受信されたと判定すると、AoTエグゼキュータ2612は、ファイバ2802を実行して、コンパイルされたコード部分CCP2に実行を指示する。説明すると、コンパイルされたコード部分CCP2は、ユーザ入力420に応答して、戦闘機を上方向、下方向、または左方向、または右方向などの方向に移動させるために実行される。
コンパイルされたコード部分CCP2が実行された後、AoTエグゼキュータ2612は、ファイバ2802を実行して、コンパイルされたコード部分CCP2の実行の終わりにキャッシュ102のレジスタの状態を格納する操作2804を実行する。例えば、コンパイルされたコード部分CCP2の実行が終了するまでにユーザ1によって獲得されたポイントの数は、キャッシュ102の第1のレジスタから第1のレジスタの外側のメモリ場所にコピーされる。第1のレジスタの外側のメモリ場所の例には、キャッシュ928内の別の場所またはメモリシステム926(図9B)内の場所が含まれる。別の例として、ファイバ2802がコンパイルされたコード1の実行から離れるように指示するコンパイルされたコード部分CCP2の終了サブアドレスの識別は、キャッシュ102の第2のレジスタから第2のレジスタの外側のメモリ場所にコピーされる。第2のレジスタの外側のメモリ場所の例には、キャッシュ928内の別の場所またはメモリシステム926内の場所が含まれる。
操作2804の後のファイバ2802の継続的な実行中、操作2806において、スイッチ2610(図26)は、操作2804の実行をコンパイルされたコード2の実行に切り替える。一例として、操作2806の間、ファイバ2802が実行されると、スイッチ2610は、操作2806からコンパイルされたコード2の実行に実行を指示する。別の例として、第1及び第2のレジスタの状態が、第1及び第2のレジスタの外側のメモリ場所にコピーされた後、ファイバ2802は、操作2804からコンパイルされたコード2の開始アドレスに切り替え、コンパイルされたコード2が実行される。また、この例では、第1レジスタと第2レジスタは、コンパイルされたコード2を実行して生成されたデータによって上書きされる。
コンパイルされたコード2は、コンパイルされたコード2の終了アドレスに到達するまで実行される。コンパイルされたコード2が実行された後、ファイバ2802の実行は、操作2808を続行する。操作2808の間、コンパイルされたコード2を実行して生成されたデータで上書きされるキャッシュ102のレジスタは、レジスタの状態で上書きされる。そのため、レジスタは状態とともに復元される。例えば、コンパイルされたコード部分CCP2の実行が終了するまでにユーザ1が獲得したポイント数は、第1のレジスタの外側のメモリ場所から第1のレジスタにコピーされる。また、この例では、ファイバ2802がコンパイルされたコード1を離れるように指示するコンパイルされたコード部分CCP2の終了サブアドレスの識別が、第2のレジスタの外側のメモリ場所から第2のレジスタにコピーされる。
操作2808後のファイバ2802の継続実行中、操作2810において、スイッチ2610は、操作2808の実行からコンパイルされたコード部分CCP3の実行に切り替える。例えば、第1及び第2のレジスタの状態が、第1及び第2のレジスタの外側のメモリ場所から第1及び第2のレジスタにコピーバックされた後、ファイバ2802は実行の指示をCCP2の終了サブアドレスに切り替える。ファイバ2802は、実行が継続されると、コンパイルされたコード部分CCP3の開始サブアドレスにおいて開始するコンパイルされたコード部分CCP3を実行するように指示する。
このようにして、ファイバクリエータ2608(図26)は、ファイバ2802を作成する。例えば、ファイバクリエータ2608は、コンパイルされたコード部分CCP1を最初に、コンパイルされたコード部分CCP2を2番目に、操作2804を3番目に、操作2806を4番目に、コンパイルされたコード2を5番目に、操作2808を6番目に、操作2810を7番目に、そしてコンパイルされたコード部分CCP3を8番目に実行する順序またはシーケンスまたは方向を作成する。説明すると、ファイバ2802は、操作2804、2806、2808、及び2810を含む。別の例として、ファイバ2802が実行されるとき、コンパイルされたコード1及び2は、同時になど、並行して実行されない。むしろ、コンパイルされたコード1と2は、順次に、または連続的に実行される。一実施形態では、コンパイルされたコード1及び2のうちの1つ以上は、キャッシュ928(図9B)に格納される代わりに、メモリシステム926(図9B)に格納される。
一実施形態では、レガシーゲームNの画像または画像フレームを伴うサウンド出力のリフレッシュは、画像または画像フレームのリフレッシュが実行される前または後に実行される。例えば、コンパイルされたコード3は、ファイバ2802によって指示されるように、コンパイルされたコード2が実行される前または直後に、AoTエグゼキュータ2612によって実行される。この例では、コンパイルされたコード2を実行して画像を周期的に更新するとき、コンパイルされたコード3が実行されて画像を伴うサウンド出力が周期的に更新される。別の例として、コンパイルされたコード3は、レガシーゲームNの画像または画像フレームを伴ったサウンド出力を周期的にリフレッシュするための機能を含む。この例では、コンパイルされたコード部分CCP3が実行された後、キャッシュ102のレジスタの状態をキャッシュ102のレジスタの外側のメモリ場所に格納する別の操作が、AoTエグゼキュータ2612によって実行され、続いて、ファイバ2802の指示に従って、コンパイルされたコード3に切り替える操作が行われる。コンパイルされたコード3に切り替える操作は、スイッチ2610によって実行され、スイッチ2610は、ファイバ2802に、コンパイルされたコード3への実行に切り替えるように指示する。次に、コンパイルされたコード3は、ファイバ2802の指示に従って、AoTエグゼキュータ2612によって実行される。さらに、この例では、コンパイルされたコード3の実行後、キャッシュ102のレジスタ内に格納された状態は、コンパイルされたコード3の実行に基づいて生成されたデータで更新される。この例では、更新後、AoTエグゼキュータ2612によってデータがレジスタの状態で上書きされると、レジスタの状態が復元される。また、この例では、データが上書きされた後、スイッチ2610は、ファイバ2802によって提供される指示に従って、コンパイルされたコード1のコンパイルされたコード部分4(CCP4)に実行を切り替える。この例では、ファイバ2812は、レジスタの状態を格納する他の操作、コンパイルされたコード3への切り替えの操作、コンパイルされたコード3の実行、レジスタ内のデータをレジスタの状態で上書きする操作、及びCCP4の実行の実行順序を含む。
一実施形態では、ファイバ2802は、コンパイルされたコード部分CCP1、コンパイルされたコード部分CCP2、操作2804、操作2806、コンパイルされたコード2、操作2808、操作2810、及びコンパイルされたコード部分CCP3を含む。
一実施形態では、ファイバ2802は、操作2804、操作2806、コンパイルされたコード2、操作2808、及び操作2810を含む。
一実施形態では、コンパイルされたコード部分CCP1の実行の終了時にキャッシュ102のレジスタの1つ以上の状態を格納する操作2804に類似したレジスタ状態の格納操作は、コンパイルされたコード部分CCP1のランニング後にAoTエグゼキュータ2612によって実行される。また、レジスタ状態の格納操作の後、操作2806が繰り返され、コンパイルされたコード2の実行に切り替わる。例えば、ユーザ入力なしでタイトルGNを有するレガシーゲームNのアニメーションを提供する画像フレームは、周期的に更新されるか、またはアニメーションと同時のオーディオフレームに基づいたサウンド出力は、周期的に更新されるか、またはそれらの組み合わせになる。コンパイルされたコード2が実行されると、1つ以上の状態がデータで更新される。さらに、コンパイルされたコード2が実行された後、1つ以上の状態でデータを置き換える操作2808などのレジスタ状態の復元操作が、AoTエグゼキュータ2612によって実行される。さらに、レジスタ状態の復元操作後、操作2810が繰り返され、コンパイルされたコード部分CCP2の実行に切り替わる。この実施形態では、ファイバ2802は、コンパイルされたコード部分CCP1、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、レジスタ状態の復元操作、操作2810、及びコンパイルされたコード部分CCP2の実行順序を含む。
一実施形態では、ファイバ2802は、コンパイルされたコード部分CCP1、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、復元レジスタ状態の格納操作、操作2810、及びコンパイルされたコード部分CCP2を含む。
一実施形態では、ファイバ2802は、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、及び復元レジスタ状態の格納操作、操作2810を含む。
一実施形態では、コンパイルされたコード部分CCP3の実行の終了時にキャッシュ102のレジスタの1つ以上の状態を格納する操作2804に類似したレジスタ状態の格納操作は、コンパイルされたコード部分CCP3のランニング後にAoTエグゼキュータ2612によって実行される。また、レジスタ状態の格納操作の後、操作2806が繰り返され、コンパイルされたコード2の実行に切り替わる。例えば、戦闘機が、いずれのユーザ入力も伴わずに動く画像フレームが、周期的に更新されるか、または戦闘機の動きと同時に音声フレームに基づいたサウンド出力が、周期的に更新されるか、またはそれらの組み合わせが行われる。コンパイルされたコード2が実行されると、1つ以上の状態がデータで更新される。さらに、コンパイルされたコード2が実行された後、1つ以上の状態でデータを置き換える操作2808などのレジスタ状態の復元操作が、AoTエグゼキュータ2612によって実行される。さらに、レジスタ状態の復元操作の後、操作2810が繰り返され、コンパイルされたコード部分の実行に切り替わる。後続のコンパイルされたコード部分は、コンパイルされたコード部分CCP3の直後に続く。コンパイルされたコード部分CCP3と後続のコンパイルされたコード部分との間には、他のコンパイルされたコード部分はない。この実施形態では、ファイバ2802は、コンパイルされたコード部分CCP3、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、レジスタ状態の復元操作、操作2810、及び後続のコンパイルされたコード部分の実行順序を含む。
一実施形態では、ファイバ2802は、コンパイルされたコード部分CCP3、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、レジスタ状態の復元操作、操作2810、及び後続のコンパイルされたコード部分を含む。
一実施形態では、ファイバ2802は、レジスタ状態の格納操作、操作2806、コンパイルされたコード2、レジスタ状態の復元操作、及び操作2810を含む。
図29Aは、レガシーゲームNの実行可能機能のいくつかを説明するための、レガシーゲームNのアセンブリ言語プログラムなどの実行可能コード2900の実施形態の図である。実行可能コード2900は、「.code」という用語で始まり、メモリデバイス2706(図27)の読み取り中に、実行可能コード2900が開始されようとしていることをホストプロセッサ2704に示す。実行可能コード2900は、読み取りオペコード、書き込みオペコード、リセットオペコード、ジャンプオペコード、追加オペコード、及びループオペコードを含む。一例として、読み取りオペコードは、レガシーマシン900(図9A)のキャッシュのレジスタ、またはメモリデバイス906(図9A)内のメモリ場所、またはCD-ROMドライブ908(図9A)に結合されたCD-ROMからデータまたは値などの情報を読み取るために実行される。別の例として、書き込みオペコードは、レガシーマシン900のキャッシュのレジスタ、またはメモリデバイス906内のメモリ場所、またはCD-ROMドライブ908に結合されたCD-ROMに情報を書き込むために実行される。さらに別の例として、ジャンプオペコードは、レガシーマシン900のキャッシュのレジスタ、またはメモリデバイス906内のメモリ場所、またはCD-ROMドライブ908に結合されたCD-ROMにジャンプするために実行される。別の例として、追加オペコードは、レガシーマシン900のキャッシュの第1のレジスタ、またはメモリデバイス906内の第1のメモリ場所、またはCDーROMドライブ908に結合されたCD-ROM内の第1の場所の中に格納された値を、レガシーマシン900のキャッシュの第2のレジスタ、またはメモリデバイス906内の第2のメモリ場所、またはCD-ROM内の第2の場所の中に格納された値に追加するために実行される。別の例として、ループオペコードは、条件が満たされるまで操作を複数回繰り返すために実行される。説明すると、ループオペコードは、レガシーマシン900のキャッシュのレジスタr1内に格納された値を、レガシーマシン900のキャッシュのレジスタr0内に格納された値と乗算するために実行される。各オペコードは、レガシーゲームNの実行可能機能の例である。
一実施形態では、ホストプロセッサ2702は、「.code」などの開始用語がオペコードに先行することを判定する必要なしに、本明細書で説明されるオペコードのいずれかを実行可能機能として識別する。オペコードをデータから区別するためホストプロセッサ2702がオペコードを識別するために、オペコードの前に用語を付ける必要はない。
図29Bは、データ2910の実施形態の図であり、これは、ホストプロセッサ2704(図27)によって実行可能ではないと識別される。データ2910は、レガシーゲームNのものである。データ2910は、「.data」という用語で始まり、メモリデバイス2706(図27)の読み取り中に、データ2910が開始されようとしていることをホストプロセッサ2704に示す。一例として、データ2910は、レジスタr1内に格納された4の値と、レジスタr1内に格納された6の値とを含む。メモリデバイス2706内に格納されたレガシーゲームNのデータの他の例には、サウンドデータ及びゲームアイコンなどの画像データが含まれる。
図30Aは、ソースコード3000の実施形態を示している。ソースコード3000には、main()という名称が含まれている。名称には、開いた中括弧開くがさらに続き、これには、さらに、整数を格納するためのキャッシュ102のレジスタaの割り当て、及び整数を格納するためのキャッシュ102のレジスタbの割り当てが続く。割り当ての後には、レジスタaからの値の読み取り、レジスタbへの値1の書き込みが続く。ソースコードは中括弧閉じるで終わる。ソースコード3000は、レガシーゲームNの第1のソースコードの例である。
図30Bは、ソースコード3010及び別のソースコード3012の実施形態を示している。ソースコード3010は、第1のソースコードの例であり、ソースコード3012は第2のソースコードの例である。ソースコード3010は、コンパイルされたコード1を生成するためにコンパイルされている。ソースコード3012は、コンパイルされたコード2、またはコンパイルされたコード3、またはそれらの組み合わせを生成するためにコンパイルされている。
図31は、ブロッククリエータ604とファイバクリエータ2608との間の結合を説明するためのシステム3100の実施形態の図である。ブロッククリエータ604は、ファイバクリエータ2608に結合されている。ブロッククリエータ604及びファイバクリエータ2608によって実行される操作は、図32A~32Cを参照して以下に説明されている。
図32Aは、図31のブロッククリエータ604及びファイバクリエータ2608によって実行される方法3200の実施形態のフローチャートである。方法3200では、操作3202は、ファイバクリエータ2608によって実行される。操作3202において、ファイバクリエータ2608は、ファイバ2802(図28)がセットアップされているかどうかを判定する。例えば、ユーザ入力418の受信に応答して、ファイバクリエータ2608は、ユーザ入力418を処理するためのファイバ2802が作成され、キャッシュ102に格納されているかどうかを判定する。説明すると、ファイバクリエータ2608は、ユーザ入力418を解析して、ユーザ入力418が、レガシーゲームNのプレイを開始するための要求を含むかを判定し、コンパイルされたコード部分CCP1が、レガシーゲームNのアニメーションを含むかを判定して、ユーザ入力418を処理するためのファイバ2802が作成されるかを判定する。別の例として、ユーザ入力420を受信することに応答して、ファイバクリエータ2608は、ユーザ入力420を処理するためのファイバ2802が作成され、キャッシュ102内に格納されているかどうかを判定する。説明すると、ファイバクリエータ2608は、ユーザ入力420を解析して、ユーザ入力420が、仮想戦闘機をある方向に動かす要求を含むことを判定し、コンパイルされたコード部分CCP2が、仮想戦闘機のある方向での動きを表す1つ以上の画像フレーム422を生成する操作を含むことを判定し、コンパイルされたコード部分CCP2を実行した後に、操作2804及び2806、コンパイルされたコード2、ならびに操作2808及び2810が実行され、ユーザ入力420を処理するためのファイバ2802が作成されていることを判定する。
ファイバ2802がセットアップされていることを判定すると、次のコンパイルされたコードに切り替える操作3204が、スイッチ2610(図26)によって実行される。操作3204において、スイッチ2610は、実行を次のコンパイルされたコードに切り替える。例えば、スイッチ2610は、ユーザ入力418を受信すると、実行をコンパイルされたコード1の開始アドレスに切り替える。別の例として、スイッチ2610は、ユーザ入力420を受信した後、実行をコンパイルされたコード2の開始アドレスに切り替える。この例では、コンパイルされたコード部分CCP1及びCCP2と操作2804が実行された後、実行はコンパイルされたコード2に切り替えられる(図28)。
方法3200の操作3206は、AoTエグゼキュータ2612(図26)によって実行されている。例えば、AoTエグゼキュータ2612は、次にコンパイルされたコードを実行する。説明すると、AoTエグゼキュータ2612は、ユーザ入力418が受信されたときに、コンパイルされたコード1の開始アドレスでコンパイルされたコード部分CCP1を実行する。別の説明として、AoTエグゼキュータ2612は、コンパイルされたコード部分CCP2が実行され、操作2804が実行された後、コンパイルされたコード2の開始アドレスでコンパイルされたコード2を実行する。操作3202、3204、及び3206は、操作3206の後にこのように繰り返される。
一方で、キャッシュ102に格納されていないなど、ファイバ2802がセットアップされていないと判定すると、ファイバクリエータ2608は、方法3200の操作3208において、次のコンパイルされたコードが、ネイティブライブラリから特定されることができると判定する。例えば、ファイバクリエータ2608は、ネイティブライブラリを解析または検索して、ユーザ入力418が受信されたときにユーザ入力418を処理するにコンパイルされたコード1を識別する。説明すると、ファイバクリエータ2608は、ネイティブライブラリを解析し、コンパイルされたコード1の機能が、ユーザ入力418を処理することが可能かどうかを判定する。さらに説明すると、ファイバクリエータ2608は、ユーザ入力418を解析して、ユーザ入力418が、レガシーゲームNのプレイを開始するための要求を含むかを判定し、コンパイルされたコード部分CCP1が、レガシーゲームNのアニメーションを含むかを判定して、ユーザ入力418を処理するためのコンパイルされたコード1が、ネイティブライブラリに格納されているかを判定する。別の例として、ファイバクリエータ2608は、ネイティブライブラリを解析または検索して、ユーザ入力420が受信されたときにユーザ入力420を処理するにコンパイルされたコード1を識別する。説明すると、ファイバクリエータ2608は、ネイティブライブラリを解析し、コンパイルされたコード1の1つ以上の機能が、ユーザ入力420を処理することが可能かどうかを判定する。さらに説明すると、ファイバクリエータ2608は、ユーザ入力420を解析して、ユーザ入力420が仮想戦闘機をある方向に動かす要求を含むことを判定し、コンパイルされたコード部分CCP2が、ある方向での戦闘機の動きを表す1つ以上の画像フレーム422を生成する操作を含むことを判定し、ユーザ入力420を処理するためのコンパイルされたコード1がネイティブライブラリ内に格納されていることを判定する。
次のコンパイルされたコードが、ネイティブライブラリ内で特定され得ると判定すると、方法3200の操作3210において、ファイバクリエータ2608は、コンパイルされたコードの開始アドレスなどのエントリポイントを用いてファイバ2802をセットアップする。例えば、ファイバクリエータ2608は、ユーザ入力418を受信すると、コンパイルされたコード1の開始アドレスを用いてファイバ2608を作成する。別の例として、ファイバクリエータ2608は、コンパイルされたコード部分CCP2の開始サブアドレスを用いてファイバ2802を作成し、その後に操作2804が続き、操作2806がさらに続き、コンパイルされたコード2の開始アドレスがさらに続き、操作2808が続き、加えて、ユーザ入力420を受信すると、操作2810が続く。操作3204は、操作3210の後に実行される。
一方で、次にコンパイルされたコードがネイティブライブラリ内で特定できないと判定すると、方法3200の実行は図32Bに続く。例えば、次のコンパイルされたコードがネイティブライブラリ内で特定できないことを示す信号が、ファイバクリエータ2608から基本ブロッククリエータ604に送信される。
図32Bは、方法3200の続きである。方法3200の操作654において、次のコンパイルされたコードがネイティブライブラリ内で特定できないことを示す信号を受信すると、基本ブロッククリエータ604は、ユーザ入力418または420などのユーザ入力を処理するための基本ブロック(n+1)~pのうちの1つ以上が、キャッシュ102内に格納されているかどうかを判定する。ユーザ入力を処理するためのブロック(n+1)~pのうちの1つ以上がキャッシュされていると判定すると、基本ブロック(n+1)~pのうちの1つ以上を動作する操作656が実行される。例えば、ブロックディスパッチャ302は、キャッシュ102から基本ブロック1~nのうちの1つ以上を読み取るために、ブロックリーダ608に要求を送信する。コマンドを受信すると、ブロックリーダ608(図6A)は、キャッシュ102から基本ブロック(n+1)~pのうちの1つ以上を読み取り、基本ブロック(n+1)~pのうちの1つ以上をブロックディスパッチャ302(図3)に提供する。
基本ブロック1~nのうちの1つ以上を受信すると、ブロックディスパッチャ302は、基本ブロック(n+1)~pのうちの1つ以上を実行して、レガシーゲームNのアニメーションまたは仮想環境452(図4B)を生成する。説明すると、ユーザ入力420が受信されると、ブロックディスパッチャ302は、基本ブロック(n+1)~pのうちの1つ以上を実行して、1つ以上の画像フレーム422を生成し、この画像フレームは、仮想オブジェクト454の位置及び方向、仮想オブジェクト454のパラメータ、仮想環境452内の他の仮想オブジェクトの位置及び方向、及び仮想環境452内の他の仮想オブジェクトのパラメータなどの仮想環境データを含む。ブロックディスパッチャ302は、エミュレーションプロセッサシステム409のGPUに1つ以上の画像フレーム422を提供し、ディスプレイデバイス410(図4A)のディスプレイ画面上にまたはHMDに仮想環境452を表示する。別の例として、ブロックディスパッチャ302は、基本ブロック(n+1)~pのうちの1つ以上を実行して1つ以上のオーディオフレームを生成し、1つ以上のオーディオフレームをクライアントデバイスに提供して、1つ以上のオーディオフレームに基づいてサウンドを出力する。方法3200は、操作656の後に繰り返される。別の説明として、ユーザ入力418が受信されると、基本ブロック(n+1)~pのうちの1つ以上が実行され、レガシーゲームNのアニメーションを表示するための画像データを生成し、画像データは、ブロックディスパッチャ302からアニメーションを表示するためのディスプレイデバイス410またはHMDに提供されている。一方で、ユーザ入力418を処理するためのブロック(n+1)~pのうちの1つ以上がキャッシュされていないと判定すると、方法3200は図32Cに続く。
図32Cは、図32Bの方法3200のフローチャートの続きである。方法3200では、操作658、660、及び662が実行される。
一実施形態では、操作3208において次のコンパイルされたコードがネイティブライブラリ内で特定できず、図32Bに示される操作が実行されないとき、方法3200がクラッシュすることに留意されたい。方法3200がクラッシュすると、レガシーゲームNがクラッシュして実行できなくなる。
図33は、システム3300の一実施形態の図であり、AoTエグゼキュータ2612とGPUエミュレータ2122との間の結合を説明している。システム3300は、AoTエグゼキュータ2612及びGPUエミュレータ2122を含む。AoTエグゼキュータ2612は、GPUエミュレータ2122に結合されている。
ユーザ入力418またはユーザ入力420(図4A)などのユーザ入力に応答して、AoTエグゼキュータ2612は、ユーザ入力を処理する。例えば、AoTエグゼキュータ2612は、コンパイルされたコード1、またはコンパイルされたコード2、またはそれらの組み合わせなどの1つ以上のコンパイルされたコードを実行する。この例では、AoTエグゼキュータ2612は、操作2804、または操作2808、またはそれらの組み合わせなどの、レジスタ状態を格納するための1つ以上の操作をさらに実行する。また、この例では、AoTエグゼキュータ2612は、画像フレーム422を生成するために、ファイバ2802(図28)などのファイバによって提供される方向性に従って、操作2806、または操作2810、またはそれらの組み合わせなどのコンパイルされたコード間で切り替えるための1つ以上の操作を実行する。画像フレーム422は、AoTエグゼキュータ2612からGPUエミュレータ2122に提供される。GPUエミュレータ2122は、1つ以上の更新されたグラフィックパラメータを画像フレーム422に適用して、画像フレーム2123を出力する。
図34は、コンパイルされたコードジェネレータ2601及びランタイム構成要素2603の場所を説明するためのシステム3400の実施形態の図である。システム3400は、サーバシステム404、ゲームコンソール402、コンピュータネットワーク408、及びハンドヘルドコントローラ414を含む。サーバシステム404は、コンパイルされたコードジェネレータ2601及びNIC3402を含む。NIC3402は、コンパイルされたコードジェネレータ2601に結合されている。ゲームコンソール42は、コンパイルされたコード1、コンパイルされたコード2(図28)、及びコンパイルされたコード3などの複数のコンパイルされたコードを含むメモリデバイス406を含む。例えば、本明細書で説明されるコンパイルされたコードは、ゲームコンソール402内に事前に格納されている。説明すると、ユーザ1によるゲームコンソール402の購入時に、コンパイルされたコードは、メモリデバイス406に格納されている。
同様に、レガシーゲームコードgcNは、メモリデバイス406に格納されている。例えば、ゲームコードgcNは、ゲームコンソール402内に事前に格納されている。説明すると、ユーザ1によるゲームコンソール402の購入時に、ゲームコードgcNは、メモリデバイス406に格納されている。また、ランタイム構成要素2603は、ゲームコンソール402内に配置されている。説明すると、ユーザ1によるゲームコンソール402の購入時に、ランタイム構成要素2603は、ゲームコンソール402内にある。ランタイムコンポーネント2603は、入力プロセッサシステム407、メモリデバイス406、及びNIC1212に結合されている。
入力プロセッサシステム408は、ハンドヘルドコントローラ414から、ユーザ入力418またはユーザ入力419などのユーザ入力を受信する。ユーザ入力418が、入力プロセッサシステム407によって受信されると、入力プロセッサシステム407は、ユーザ入力418を変換する必要がないと判定し、ランタイムコンポーネント2603にユーザ入力418を提供する。ユーザ入力418を受信すると、ランタイムコンポーネント2603は、ユーザ入力418を処理する。ユーザ入力418の処理中に、AoTエグゼキュータ2612は、メモリデバイス406からの1つ以上のコンパイルされたコードにアクセスし、ゲームコードgcNからの画像データまたはオーディオデータなどのデータにアクセスし、ファイバ2802(図28)によって提供される方向性に従ってコンパイルされたコードをデータに適用し、1つ以上の画像フレーム422を生成する。例えば、コンパイルされたコード1は、ファイバ2802の方向性に従って、AoTエグゼキュータ2612によって実行される。この例では、コンパイルされたコード1の実行中に、アニメーション画像データなどの画像データが、ゲームコードgcNからアクセスされて、レガシーゲームNの1つ以上の画像フレーム422を生成する。さらにこの例では、1つ以上の画像フレーム422が、レガシーゲームNのアニメーションを表示するために、ゲームコンソール402からディスプレイデバイス410に送信される。
さらに、ユーザ入力419が入力プロセッサシステム407によって受信されると、入力プロセッサシステム407は、ユーザ入力419をユーザ入力420に変換し、ユーザ入力420をランタイムコンポーネント2603に提供する。ユーザ入力420を受信することに応答して、ランタイムコンポーネント2603は、ユーザ入力420を処理する。ユーザ入力420の処理中に、AoTエグゼキュータ2612は、メモリデバイス406から、コンパイルされたコード1及び2などの1つ以上のコンパイルされたコードにアクセスし、ゲームコードgcNから、画像データまたはオーディオデータなどのデータにアクセスし、ファイバ2802によって提供される方向性に従ってコンパイルされたコードをデータに適用して、1つ以上の画像フレーム422を生成する。また、この例では、1つ以上の画像フレーム422が、レガシーゲームNの表示のために、ゲームコンソール402からディスプレイデバイス410に送られる。
一実施形態では、コンパイルされたコードは、サーバシステム404のコンパイルされたコードジェネレータ2601によって生成され、サーバシステム404の1つ以上のメモリデバイス内に格納される。ユーザ入力418は、ゲームコンソール402によって受信されると、ゲームコンソール418からコンピュータネットワーク408を介してコンパイルされたコードジェネレータ2601に送信される。ユーザ入力418を受信することに応答して、コンパイルされたコードジェネレータ2601は、サーバシステム404の1つ以上のメモリデバイスからコンパイルされたコードにアクセスし、コンパイルされたコードをNIC3402に送信する。NIC3402は、ネットワーク通信プロトコルをコンパイルされたコードに適用して、1つ以上のパケットを生成し、1つ以上のパケットを、コンピュータネットワーク408を介してゲームコンソール402に送信する。NIC1212は、1つ以上のパケットを受信し、ネットワーク通信プロトコルを1つ以上のパケットに適用して、コンパイルされたコードを抽出し、コンパイルされたコードをランタイムコンポーネント2603に提供する。ランタイムコンポーネント2603は、NIC1212からコンパイルされたコードを受信し、コンパイルされたコードをメモリデバイス406内に格納する。ユーザ入力420が入力プロセッサシステム407から受信されると、ランタイムコンポーネント2603のファイバクリエータ2608は、ファイバ2802を生成し、コンパイルされたコードの実行の方向性を提供する。
一実施形態では、AoTエグゼキュータ2612は、更新されたマシン920(図9B)のCPU922によって実行されるコンピュータプログラムである。一実施形態では、AoTエグゼキュータ2612は、メモリシステム926内に、またはキャッシュ928(図9B)内に格納される。CPU922は、メモリシステム926またはキャッシュ928からAoTエグゼキュータ2612にアクセスし、AoTエグゼキュータ2612を実行する。
一実施形態では、ランタイムコンポーネント2603は、ゲームコンソール402のCPU922による実行のために、メモリデバイス406に事前に格納されている。
図35は、サーバシステム404内のAoTプロセッサシステム2600の場所を説明するためのシステム3500の実施形態の図である。システム3500は、サーバシステム404、ディスプレイデバイス410、コンピュータネットワーク408、及びハンドヘルドコントローラ414を含む。サーバシステム404は、メモリデバイス412、AoTプロセッサシステム2600、及び入力プロセッサシステム407を含む。メモリデバイス412は、入力プロセッサシステム407に結合されているAoTプロセッサシステム2600に結合されている。入力プロセッサシステム407は、コンピュータネットワーク408に結合されているNIC3402に結合されている。NIC3402は、AoTプロセッサシステム2600に結合されている。
ユーザ入力418は、ハンドヘルドコントローラ414からディスプレイデバイス410に送信される。ディスプレイデバイス410のNICは、ネットワーク通信プロトコルをユーザ入力418に適用して、1つ以上のパケットを生成し、コンピュータネットワーク408を介してNIC3402にパケットを送信する。NIC3402は、ネットワーク通信プロトコルを1つ以上のパケットに適用して、1つ以上のパケットからユーザ入力418を抽出し、ユーザ入力418を入力プロセッサシステム407に送信する。
入力プロセッサシステム407は、ユーザ入力418を変換することなく、ユーザ入力418をAoTプロセッサシステム2600に提供する。ユーザ入力418が受信される前に、コンパイルされたコードは、AoTプロセッサシステム2600によって生成される。AoTプロセッサシステム2600は、ユーザ入力418を処理して、ファイバ2802(図28)によって提供される指示に従って、1つ以上のコンパイルされたコードを実行する。ユーザ入力418は、処理されて、1つ以上の画像フレーム422を生成する。画像フレーム422は、AoTプロセッサシステム2600からNIC3402に提供される。NIC3402は、ネットワーク通信プロトコルを1つ以上の画像フレーム422に適用して、1つ以上のパケットを生成し、コンピュータネットワーク408を介してディスプレイデバイス410にパケットを送信する。1つ以上のパケットを受信すると、ディスプレイデバイス410のNICは、ネットワーク通信プロトコルを1つ以上のパケットに適用して、1つ以上のパケットから1つ以上の画像フレーム422を取得する。ディスプレイデバイス410のGPUは、1つ以上の画像フレーム422を、レガシーゲームNのアニメーションの画像などの画像として表示する。
さらに、レガシーゲームNのプレイ中に、ハンドヘルドコントローラ414は、ユーザ入力419を生成し、ユーザ入力419をディスプレイデバイス410に送信する。ディスプレイデバイス410のNICは、ネットワーク通信プロトコルをユーザ入力419に適用して、1つ以上のパケットを生成し、コンピュータネットワーク408を介してNIC3402にパケットを送信する。NIC3402は、ネットワーク通信プロトコルを1つ以上のパケットに適用して、1つ以上のパケットからユーザ入力419を抽出し、ユーザ入力419を入力プロセッサシステム407に送信する。
入力プロセッサシステム407は、ユーザ入力419をユーザ入力420に変換し、ユーザ入力420をAoTプロセッサシステム2600に提供する。AoTプロセッサシステム2600は、ユーザ入力420を処理して、1つ以上の画像フレーム422を生成する。画像フレーム422は、AoTプロセッサシステム2600からNIC3402に提供される。NIC3402は、ネットワーク通信プロトコルを1つ以上の画像フレーム422に適用して、1つ以上のパケットを生成し、コンピュータネットワーク408を介してディスプレイデバイス410にパケットを送信する。1つ以上のパケットを受信すると、ディスプレイデバイス410のNICは、ネットワーク通信プロトコルを1つ以上のパケットに適用して、1つ以上のパケットから1つ以上の画像フレーム422を取得する。ディスプレイデバイス410のGPUは、1つ以上の画像フレーム422を、仮想環境452(図4A)などの画像として表示する。
一実施形態では、ディスプレイデバイス410の代わりに、HMDが使用される。
図36は、本開示の実装に従って、クラウドビデオゲームをクライアントデバイスにストリーミングするために実行される様々な操作を概念的に示すフロー図である。クライアントデバイスの例には、ハンドヘルドコントローラとディスプレイデバイスの組み合わせ、スマートフォン、ハンドヘルドコントローラとディスプレイデバイスとゲームコンソールの組み合わせ、ハンドヘルドコントローラとHMDの組み合わせ、ハンドヘルドコントローラとゲームコンソールとHMDの組み合わせ、タブレット、及びコンピュータが含まれる。ゲームサーバ3602は、ビデオゲームまたはゲームコードGCNなどのゲームプログラムを実行し、生の(非圧縮の)ビデオ3604及びオーディオ3606を生成する。仮想環境452(図4A)及び仮想環境452の表現中のオーディオ出力は、ビデオ3604及びオーディオ3606の例である。ゲームサーバ3602は、サーバシステム404(図4A)の一例である。示された図内の参照番号3608に示されているように、ビデオ3604及びオーディオ3606は、ストリーミング目的でキャプチャされ符号化される。符号化は、ビデオ及びオーディオストリームの圧縮を提供して、帯域幅の使用量を低減し、ゲーム体験を最適化する。符号化形式の例には、H.265/MPEG-H、H.264/MPEG-4、H.263/MPEG-4、H.262/MPEG-2、WMV、VP6/7/8/9、等が含まれる。符号化されたオーディオ3610及び符号化されたビデオ3612は、コンピュータネットワーク408の一例であるコンピュータネットワーク3620を介した送信の目的のために、参照番号3614に示されるように、ネットワークパケットにさらにパケット化される(図4A)。いくつかの実施形態では、ネットワークパケット符号化プロセスはまた、データ暗号化プロセスを採用し、それにより、強化されたデータセキュリティを提供する。図示した実施態様では、オーディオパケット3616及びビデオパケット3618は、コンピュータネットワーク3620を介した転送のために生成される。
ゲームサーバ3602はさらに、触覚フィードバックデータ3622を生成し、これもまた、ネットワーク送信のためにネットワークパケットにパケット化される。図示した実装形態では、触覚フィードバックパケット3624は、コンピュータネットワーク3620を介した転送のために生成される。
生のビデオ及びオーディオ及び触覚フィードバックデータを生成する前述の操作は、データセンタのゲームサーバ3602上で実行され、ビデオ及びオーディオを符号化し、符号化されたオーディオ/ビデオ及び触覚フィードバックデータを転送のためにパケット化する操作は、データセンタのストリーミングエンジンによって実行される。示されるように、オーディオ、ビデオ、及び触覚フィードバックパケットは、コンピュータネットワーク3620を介して転送される。参照番号3626において示されているように、オーディオパケット3616、ビデオパケット3618、及び触覚フィードバックパケット3624は、クライアントデバイスによって、例えば、解析されるなどして分解され、クライアントデバイスにおいて、ネットワークパケットから符号化されたオーディオ3628、符号化されたビデオ3630、及び触覚フィードバックデータ3622を抽出する。データが暗号化されている場合、データも暗号化される。符号化されたオーディオ3628及び符号化されたビデオ3630は、次いで、参照番号3634に示されるように、クライアントデバイスによって復号化され、クライアントデバイスのディスプレイデバイス3640上でレンダリングするためのクライアント側の生のオーディオ及びビデオデータを生成する。触覚フィードバックデータ3622は、クライアントデバイスのプロセッサによって処理されて、コントローラデバイス3642または他のインターフェースデバイス、例えば、HMDなどで触覚フィードバック効果を生成し、それらを介して触覚効果がレンダリングされることができる。コントローラデバイス3642は、クライアントデバイスのハンドヘルドコントローラ414(図4A)または1212(図12)などのハンドヘルドコントローラの一例である。触覚効果の一例は、コントローラデバイス3642のバイブレーションまたはランブルである。
ビデオゲームは、プレイヤーまたはユーザの入力に応答し、そのため、プレイヤー入力の転送及び処理について上述した同様の手順フローが実行されるが、クライアントデバイスからサーバへの逆方向であることが理解されよう。図示されるように、コントローラデバイス3642または別の更新されたコントローラ、例えば、HMDなど、またはそれらの組み合わせは、入力データ3648を生成する。入力データ3648は、ユーザ入力としてコンピュータネットワーク3620を介してデータセンタに転送するために、クライアントデバイスでパケット化される。入力データパケット3646は、ゲームサーバ3602によってパケット解除及び再構成されて、データセンタ側で入力データ3648を定義する。入力データ3648は、ゲームサーバ3602に供給され、ゲームサーバ3602は、入力データ3648を処理して、レガシーゲームNのゲーム状態を生成する。
オーディオパケット3616、ビデオパケット3618、及び触覚フィードバックパケット3624のコンピュータネットワーク3620を介した転送中に、いくつかの実施形態では、コンピュータネットワーク3620を介したデータの送信が監視されて、サービス品質を保証する。例えば、アップストリーム及びダウンストリームネットワーク帯域幅の両方を含む、コンピュータネットワーク3620のネットワーク状態は、参照番号3650によって示されるように監視され、ゲームストリーミングは、利用可能な帯域幅の変化に応じて調整される。すなわち、ネットワークパケットの符号化及び復号化は、参照番号3652によって示されるように、現在のネットワーク状態に基づいて制御される。
図37は、ゲームコンソール3700の実施形態のブロック図であり、ゲームコンソール3700は、クライアントデバイスのディスプレイデバイスとのインターフェースと互換性があり、コンピュータネットワーク3620(図36)を介して、サーバシステム404(図4A)などのゲームホスティングシステムと通信することができる。ゲームコンソール3700は、ゲームコンソール402(図4A)及びゲームコンソール1202(図12)の例である。ゲームコンソール3700は、データセンタ内に配置されているか、またはユーザ1または2などのプレイヤーが位置する場所に配置されている。いくつかの実施形態では、ゲームコードGCNまたはファイバ2802(図28)に従ってコンパイルされたコードを実行するために、ゲームコンソール3700が使用され、HMD3705上にレガシーゲームNを表示する。ゲームコンソール3700には、ゲームコンソール3700に接続可能な様々な周辺機器が設けられている。ゲームコンソール3700は、セルプロセッサ3728、ダイナミックランダムアクセスメモリ(XDRAM)ユニット3726、専用ビデオランダムアクセスメモリ(VRAM)ユニット3732を備えたリアリティシンセサイザグラフィックプロセッサユニット3730、及び入出力(I/O)ブリッジ3734を有する。ゲームコンソール3700はまた、ディスク3740aから読み取るためのBluRay(登録商標)ディスク読み取り専用メモリ(BD-ROM)光ディスクリーダ3740と、I/Oブリッジ3734を介してアクセス可能なリムーバブルスロットインハードディスクドライブ(HDD)3736と、を有する。オプションとして、ゲームコンソール3700はまた、コンパクトフラッシュ(登録商標)メモリカードを読み取るためのメモリカードリーダ3738、メモリスティック(登録商標)メモリカード、等も含み、これは、I/Oブリッジ3734を介して同様にアクセス可能である。I/Oブリッジ3734は、USB2.0ポート3724、ギガビットイーサネットポート3722、IEEE802.11b/gワイヤレスネットワーク(Wi-Fi(登録商標))ポート3720、及びBluetooth接続をサポートできるBluetooth(登録商標)ワイヤレスリンクポート3718にも接続する。
操作中、I/Oブリッジ3734は、ゲームコントローラからの、及びHMD3705からのデータを含む、すべてのワイヤレス、USB、及びイーサネットデータを取り扱う。例えば、プレイヤーが、ゲームコードGCNなどのゲームコードの一部分の実行によって生成されたレガシーゲームNをプレイしているとき、I/Oブリッジ3734は、ゲームコントローラ3642から、及び/またはHMD3705から、Bluetoothリンクを介して本明細書で説明する入力データまたは入力信号を受信し、入力データをセルプロセッサ3728に向け、セルプロセッサ3728は、それに応じて、レガシーゲームNの現在の状態を更新する。例として、HMD3705内のカメラは、プレイヤーのジェスチャをキャプチャして、ジェスチャを表す画像を生成する。
ワイヤレス、USB、及びイーサネットポートはまた、ゲームコントローラ3642及び3703、HMD3705、及び、例えば、リモートコントロール3704、キーボード3706、マウス3708、例えば、Sony Playstation Portable(登録商標)エンターテインメントデバイス、等などのポータブルエンターテインメントデバイス3710、例えば、EyeToy(登録商標)ビデオカメラ3712、等などのビデオカメラ、マイクロフォンヘッドセット3714、及びマイクロフォン3715などの、その他の周辺機器用の接続を提供する。ポータブルエンターテインメントデバイス3710は、ゲームコントローラの一例である。いくつかの実施形態では、そのような周辺機器は、無線でゲームコンソール3700に接続され、例えば、ポータブルエンターテインメントデバイス3710は、Wi-Fi(登録商標)アドホック接続を介して通信し、一方で、マイクロフォンヘッドセット3714は、Bluetoothリンクを介して通信する。
これらのインターフェースの提供は、ゲームコンソール3700が、デジタルビデオレコーダ(DVR)、セットトップボックス、デジタルカメラ、ポータブルメディアプレイヤー、ボイスオーバーインターネットプロトコル(IP)電話、モバイル電話、プリンタ、スキャナなどの他の周辺機器とも互換性がある可能性があることを意味する。
さらに、レガシーメモリカードリーダ3716は、USBポート3724を介してゲームコンソール3700に接続され、ゲームコンソール3700によって使用される種類のメモリカード3748の読み取りを可能にする。ゲームコントローラ3642及び3703、ならびにHMD3705は、Bluetoothリンク3718を介してゲームコンソール3700と無線で通信するように操作可能であるか、またはUSBポート3724に接続されるように操作可能であり、それによって電力も受け取り、これによってゲームコントローラ3642及び3703、ならびにHMD3705の電池を充電する。いくつかの実施形態では、ゲームコントローラ3642及び3703の各々、ならびにHMD3705は、メモリ、プロセッサ、メモリカードリーダ、例えば、フラッシュメモリなどの固定メモリ、例えば、照光式球形セクション、発光ダイオード(LED)、または赤外線ライト、等、などの発光体、超音波通信用のマイクロフォン及びスピーカー、音響チャンバ、デジタルカメラ、内部クロック、例えば、ゲームコンソール3700に面する球形セクションなどの認識可能な形状、及び、例えば、Bluetooth、Wi-Fi、等、などのプロトコルを使用する無線デバイスを含む。
ゲームコントローラ3642は、ユーザ1または2などのプレイヤーが両手で使用するように設計されたコントローラであり、ゲームコントローラ3703は、アタッチメントを備えた片手コントローラである。HMD3705は、頭上やプレイヤーの眼前にフィットするように設計されている。1つ以上のアナログジョイスティック及び従来の制御ボタンに加えて、各ゲームコントローラ3642及び3703は、3次元場所判定の影響を受けやすい。同様に、HMD3705は、3次元場所判定の影響を受けやすくなっている。その結果として、いくつかの実施形態では、ゲームコントローラ3642及び3703、ならびにHMD3705を用いるユーザによるジェスチャ及び動作は、従来のボタンまたはジョイスティックコマンドに加えて、またはその代わりに、ゲームへの入力として変換される。オプションで、例えば、Playstation(登録商標)ポータブルデバイスなどの他のワイヤレス対応周辺デバイスが、コントローラとして使用される。Playstation(登録商標)ポータブルデバイスの場合、追加のゲームまたは制御情報、例えば、制御命令または生存数などが、デバイスのディスプレイ画面上に提供されている。いくつかの実施形態では、例えば、ダンスマット(図示せず)、ライトガン(図示せず)、ステアリングホイール及びペダル(図示せず)、特注のコントローラ、などの他の代替的または補足的な制御デバイスが使用される。特注のコントローラの例は、高速応答クイズゲーム用の単一の、またはいくつかの大きなボタン(同様に図示せず)を含む。
リモートコントロール3704はまた、Bluetoothリンク3718を介してゲームコンソール3700と無線で通信するように操作可能である。リモートコントロール3704は、BluRay(登録商標)ディスクBD-ROMリーダ3740の操作に適した、かつ、ディスクコンテンツのナビゲーションに適した制御を含む。
BluRay(登録商標)ディスクBD-ROMリーダ3740は、従来の録音済み及び録音可能なCD、及びいわゆるスーパーオーディオCDに加えて、ゲームコンソール3700と互換性のあるCD-ROMを読み取るように操作可能である。BluRay(登録商標)ディスクBD-ROMリーダ3740はまた、従来の事前記録及び記録可能なDVDに加えて、ゲームコンソール3700と互換性のあるデジタルビデオディスク-ROM(DVD-ROM)を読み取るように操作可能である。BluRay(登録商標)ディスクBD-ROMリーダ3740はさらに、ゲームコンソール3700と互換性のあるBD-ROM、ならびに、従来の事前記録された、及び記録可能なBluRayディスクを読み取るように操作可能である。
ゲームコンソール3700は、オーディオコネクタ3750及びビデオコネクタ3752を介して、例えば、モニターまたはテレビなどの、ディスプレイ画面3744及び1つ以上のラウドスピーカー3746を有するディスプレイ及びサウンド出力デバイス3742に、リアリティシンセサイザーグラフィックスユニット3730を通じて生成されたか、または復号されたオーディオ及びビデオを供給するように操作可能であり、または、Bluetooth(登録商標)ワイヤレスリンクポート3718を介して、HMD3705のディスプレイデバイスにオーディオ及びビデオを供給するように操作可能である。オーディオコネクタ3750は、様々な実施形態において、従来のアナログ及びデジタル出力を含み、一方で、ビデオコネクタ3752は、コンポーネントビデオ、Sービデオ、コンポジットビデオ、及び1つ以上のハイデフィニションマルチメディアインターフェース(HDMI)出力を様々に含む。その結果、ビデオ出力は、位相交互線(PAL)や全米テレビジョンシステム委員会(NTSC)などの形式、または3720p、1080i、または1080pの高解像度であり得る。オーディオ処理、例えば、生成、復号化などは、セルプロセッサ3708によって実行される。ゲームコンソール3700のオペレーティングシステムは、Dolby(登録商標)5.1サラウンドサウンド、Dolby(登録商標)シアターサラウンド(DTS)、及びBlu-Ray(登録商標)ディスクからの7.1サラウンドサウンドの復号化をサポートしている。ディスプレイ及びサウンド出力デバイス3742は、ディスプレイデバイス410の一例である(図4A)。
いくつかの実施形態では、例えば、ビデオカメラ3712などのビデオカメラは、単一の電荷結合デバイス(CDD)、LEDインジケータ、及びハードウェアベースのリアルタイムデータ圧縮及び符号化装置を含み、圧縮されたビデオデータは、ゲームコンソール3700による復号化のためのイントラ画像ベースの動画専門家集団(MPEG)規格などの適切な形式で送信されるようになっている。ビデオカメラ3712のLEDインジケータは、ゲームコンソール3700からの適切な制御データに応答して、例えば、著しく不利な照明状態などを照射するように配置されている。ビデオカメラ3712のいくつかの実施形態は、USB、Bluetooth、またはWi-Fi通信ポートを介してゲームコンソール3700に接続する。ビデオカメラの様々な実施形態は、1つ以上の関連するマイクロフォンを含み、オーディオデータを送信することもできる。ビデオカメラのいくつかの実施形態では、CCDは、高解像度ビデオキャプチャに適した解像度を有する。使用時、ビデオカメラによってキャプチャされた画像は、ゲーム内に組み込まれる、またはゲーム制御入力として解釈される。別の実施形態では、ビデオカメラは、赤外線光を検出するのに適した赤外線カメラである。
様々な実施形態において、例えば、ビデオカメラまたはリモートコントロールなどの周辺デバイスとのゲームコンソール3700の通信ポートの1つを介したデータ通信を成功させるために、デバイスドライバなどの適切なソフトウェアが提供されている。
いくつかの実施形態では、ゲームコンソール3700、ゲームコントローラ3642(図36)または3703、及びHMD3705を含む前述のシステムデバイスは、HMD3705が、レガシーゲームNのインタラクティブセッションのビデオを表示及びキャプチャすることを可能にする。システムデバイスは、レガシーゲームNの対話型セッション、プレイヤー1と他のプレイヤーとの間の対話性を規定する対話型セッション、及びレガシーゲームNの対話型セッションを開始する。システムデバイスはさらに、プレイヤーによって操作されるゲームコントローラ3642(図36)もしくは3603、及び/またはHMD3705の初期位置及び向きを判定する。ゲームコンソール3700は、プレイヤーとレガシーゲームNとの間の双方向性に基づいてゲームの現在の状態を判定する。システムデバイスは、レガシーゲームNとのプレイヤーの対話型セッション中に、ゲームコントローラ3642、3703及び/またはHMD3705の位置及び向きを追跡する。システムデバイスは、レガシーゲームNの現在の状態、ならびにゲームコントローラ3642、3703及び/またはHMD3705の追跡された位置及び方向に基づいて、インタラクティブセッションの観客ビデオストリームを生成する。いくつかの実施形態では、HHCは、観客ビデオストリームをHHCのディスプレイ画面上にレンダリングする。様々な実施形態において、HMD3705はHMD3705のディスプレイ画面上に観客ビデオストリームをレンダリングする。
図38を参照すると、HMD3800の構成要素を示す図が示されている。HMD3800は、HMD3705(図37)の例である。HMD3800は、プログラム命令を実行するためのプロセッサ3801を含む。メモリデバイス3802は、記憶目的のために提供されている。メモリデバイス3802の例には、揮発性メモリ、不揮発性メモリ、またはそれらの組み合わせが含まれる。例えば、プレイヤーが見る保存データなどから生成された画像フレームの表示などの視覚的インターフェースを提供するディスプレイデバイス3804が含まれている。電池3806は、HMD3800の電源として提供されている。モーション検出モジュール3880は、磁力計3810、加速度計3812、及びジャイロスコープ3814などの様々な種類のモーションセンシティブハードウェアのいずれかを含む。
加速度計は、加速度と重力によって引き起こされる反力を測定するためのデバイスである。単軸及び多軸モデルは、異なる方向における加速度の大きさ及び方向を検出するために利用可能である。加速度計は、傾き、バイブレーション、衝撃を感知するために使用される。一実施形態では、3つの加速度計3812は、重力の方向を提供するために使用され、この方向は、2つの角度、例えば、ワールド空間ピッチ及びワールド空間ロールなどの絶対基準を与える。
磁力計は、HMD3800の近傍の磁場の強度と方向を測定する。いくつかの実施形態では、3つの磁力計3810が、HMD3800内で使用され、ワールド空間のヨー角の絶対基準を確実にする。様々な実施形態において、磁力計は、±80マイクロテスラである地球磁場にまたがるように設計されている。磁力計は金属により影響を受け、実際のヨーと単調なヨー測定値を提供する。いくつかの実施形態では、磁場は、実世界の環境において金属のために歪められ、これは、ヨー測定において歪みを引き起こす。様々な実施形態において、この歪みは、例えば、ジャイロスコープ3814、カメラ3816などの他のセンサからの情報を使用して較正される。一実施形態では、加速度計3812は、磁力計3810と共に使用されて、HMD3800の傾斜及び方位角を取得する。
ジャイロスコープは、角運動量の原理に基づいて、向きを測定または維持するためのデバイスである。一実施形態では、ジャイロスコープ3814の代わりに、3つのジャイロスコープが、慣性感知に基づいて、それぞれの軸(x、y、及びz)を横切る動きに関する情報を提供する。ジャイロスコープは、高速回転の検出に役立つ。しかしながら、ジャイロスコープは、いくつかの実施形態では、絶対基準が存在しないと、時間の経過と共にドリフトする。このことが、ジャイロスコープを周期的にリセットし、これは、オブジェクト、加速度計、磁力計などの視覚的な追跡に基づいた位置/方向の判定など、他の利用可能な情報を使用して実行され得る。
カメラ3816は、例えば、部屋、キャビン、自然環境など、プレイヤーを取り巻く実世界環境の画像及び画像ストリームをキャプチャするために提供される。様々な実施形態において、複数のカメラが、HMD3800に含まれており、複数のカメラは、例えば、プレイヤーがHMD3800などのディスプレイを見ているときに、プレイヤーから離れる方向に向けられた後ろ向きのカメラ、及び例えば、プレイヤーがHMD3800のディスプレイを見ているときにプレイヤーに向けられる、正面向きのカメラを含んでいる。さらに、いくつかの実施形態では、深度カメラ3818は、実世界環境内のオブジェクトの深度情報を感知するためにHMD3800に含まれている。
HMD3800は、オーディオ出力を提供するためのスピーカー3820を含む。また、いくつかの実施形態では、周囲環境からのサウンドを含む実世界環境からのオーディオ、及びプレイヤーによって行われたスピーチ、などをキャプチャするために、マイクロフォン3822が含まれている。HMD3800は、触覚フィードバックをプレイヤーに提供するための、例えば、バイブレーションデバイスなどの触覚フィードバックモジュール3824を含む。一実施形態では、触覚フィードバックモジュール3824は、HMD3800の動き及び/またはバイブレーションを起こして、プレイヤーに触覚フィードバックを提供することができる。
LED3826は、HMD3800のステータスの視覚的インジケータとして提供されている。例えば、LEDは、バッテリレベル、電源オンなどを示し得る。カードリーダ3828は、HMD3800がメモリカードに情報を書き込み、そこから情報を読み取ることを可能にするために提供される。USBインターフェース3830は、周辺デバイスの接続、または他の携帯デバイス、コンピュータなどの他のデバイスへの接続を可能にするためのインターフェースの一例として含まれている。HMD3800の様々な実施形態では、HMD3800のより大きな接続性を可能にするために、様々な種類のインターフェースのいずれかが含まれ得る。
Wi-Fi(登録商標)モジュール3832は、無線ネットワーク技術を介したインターネットへの接続を可能にするために含まれている。また、HMD3800は、他のデバイスへのワイヤレス接続を可能にするBluetooth(登録商標)モジュール3834を含む。いくつかの実施形態では、他のデバイスに接続するための通信リンク3836も含まれている。一実施形態では、通信リンク3836は、無線通信のために赤外線送信を利用する。他の実施形態では、通信リンク3836は、他のデバイスとの通信のための様々な無線または有線伝送プロトコルのいずれかを利用する。
入力ボタン/センサ3838は、プレイヤーに入力インターフェースを提供するために含まれている。ボタン、タッチパッド、ジョイスティック、トラックボールなど、様々な種類の入力インターフェースが含まれている。様々な実施形態において、超音波通信モジュール3840が、超音波技術を介して他のデバイスとの通信を容易にするためにHMD3802に含まれている。
プレイヤーからの生理学的データの検出を可能にするために、生体センサ3842が含まれている。一実施形態では、バイオセンサー3842は、プレイヤーの皮膚を通して、プレイヤーの生体電気信号を検出するための1つ以上の乾式電極を含む。
HMD3800の前述の構成要素は、HMD3800に含まれ得る単なる例示的な構成要素として説明されてきた。様々な実施形態において、HMD3800は、様々な前述の構成要素のいくつかを含むか、または含まない。
図39は、情報サービスプロバイダ(INSP)アーキテクチャの実施形態を示している。INSP3902は、地理的に分散し、例えば、LAN、WAN、またはそれらの組み合わせなどのコンピュータネットワーク3906を介して接続されたプレイヤーに多数の情報サービスを提供する。コンピュータネットワーク3906は、コンピュータネットワーク3620(図36)の例である。ユーザ1は、クライアントデバイス3920-1を操作し、ユーザ2は、別のクライアントデバイス3920-2を操作し、ユーザ3は、さらに別のクライアントデバイス3920-3を操作する。
いくつかの実施形態では、各クライアントデバイス3920-1、3920-2、及び3920-3は、CPU、ディスプレイ、及び入出力(I/O)インターフェースを含む。各クライアントデバイス3920-1、3920-2、及び3920-3の例には、パーソナルコンピュータ(PC)、携帯電話、ネットブック、タブレット、ゲームシステム、携帯情報端末(PDA)、ゲームコンソール3700とディスプレイデバイスの組み合わせ、HMD3800(図38)、ゲームコンソール3700とHMD3800の組み合わせ、デスクトップコンピュータ、ラップトップコンピュータ、及びスマートテレビ、等が含まれる。いくつかの実施形態では、INSP3902は、クライアントデバイスのタイプを認識し、使用される通信方法を調整する。
いくつかの実施形態では、INSP3902は、株価更新などの1つのタイプのサービス、または放送メディア、ニュース、スポーツ、ゲームなどのような様々なサービスを提供する。さらに、各INSPによって提供されるサービスは動的であり、つまり、サービスはどの時点でも追加または削除できる。したがって、特定の個人に特定のタイプのサービスを提供するINSPは、時間の経過とともに変化することがある。例えば、クライアントデバイス3920-1は、クライアントデバイス3920-1に近いINSPによってサービス提供され、クライアントデバイス3920-1は、ユーザ1の地元にあり、クライアントデバイス3920-1は、ユーザ1が別の都市に移動するときに、異なるINSPによってサービス提供される。地元のINSPは、要求された情報とデータを新しいINSPに転送し、情報が、新しい都市へとクライアントデバイス3920-1を「追従」し、データをクライアントデバイス3920-1に近づけてアクセスしやすくする。様々な実施形態では、マスターとサーバの関係は、クライアントデバイス3920-1の情報を管理するマスターINSPと、マスターINSPからの制御下でクライアントデバイス3920-1と直接インターフェースするサーバINSPとの間に確立される。いくつかの実施形態では、クライアントデバイス3920-1が世界中を移動すると、INSPをより良い位置に置いて、クライアントデバイス3920-1にサービス提供して、これらのサービスを提供するものにするために、データは1つのISPから別のISPに転送される。
INSP3902は、コンピュータネットワーク3906を介して顧客にコンピュータベースのサービスを提供するアプリケーションサービスプロバイダ(ASP)3908を含む。ASPモデルを使用して提供されるソフトウェアは、オンデマンドソフトウェアまたはsoftware as a service(SaaS)とも称されることもある。例えば、顧客関係管理などのコンピュータベースのサービスへのアクセスを提供する簡単な形式は、例えば、ハイパーテキスト転送プロトコル(HTTP)などの標準プロトコルを使用することによる。アプリケーションソフトウェアは、ベンダーのサーバ上にあり、ベンダー、及び/またはシンクライアントなどの他のリモートインターフェースによって提供されている専用クライアントソフトウェアによって、ハイパーテキストマークアップ言語(HTML)などを使用したウェブブラウザを介して各クライアントデバイス3920-1、3920-2、及び3920-3によってアクセスされる。
広い地理的領域で提供されるサービスは、多くの場合、クラウドコンピューティングを使用する。クラウドコンピューティングは、動的にスケーラブルで、多くの場合、仮想化されたリソースがコンピュータネットワーク3906を介してサービスとして提供されるコンピューティングのスタイルである。ユーザ1から3は、それらをサポートする「クラウド」のテクノロジインフラストラクチャの専門家である必要はない。いくつかの実施形態では、クラウドコンピューティングは、Infrastructure as a Service(IaaS)、Platform as a Service(PaaS)、及びSoftware as a Service(SaaS)などの異なるサービスに分割される。クラウドコンピューティングサービスは、多くの場合、ウェブブラウザからアクセスされる一般的なビジネスアプリケーションをオンラインで提供し、一方で、ソフトウェア及びデータはサーバに格納されている。クラウドという用語は、コンピュータネットワーク3906が、どのようにコンピュータネットワーク図に描かれているか、かつ、秘匿する複雑なインフラストラクチャの抽象化であるかに基づいて、例えば、サーバ、ストレージ、ロジックなどを使用して、コンピュータネットワーク3906のメタファーとして使用される。
さらに、INSP3902にはゲーム処理プロバイダ(GPP)3910が含まれており、これは、本明細書では、レガシーゲームNなどの、シングルプレイヤー及びマルチプレイヤービデオゲームをプレイするためにクライアントデバイス3920-1、3920-2、及び3920-3によって使用されるゲーム処理サーバと呼ばれることもある。コンピュータネットワーク3906上でプレイされるほとんどのビデオゲームは、ゲームサーバへの接続を介して操作する。通常、ゲームは、クライアントデバイス3920-1、3920-2、及び3920-3からデータを収集し、それらを他のユーザによって操作されている他のクライアントに分配する専用のサーバアプリケーションを使用する。これはピアツーピアの配置よりも効率的で効果的であるが、別のサーバが、サーバアプリケーションをホストするために使用される。いくつかの実施形態では、GPP3910は、クライアントデバイス3920-1、3920-2、及び3920-3間の通信を確立し、集中型GPP3910にさらに依存することなく、情報を交換する。
専用のGPPは、クライアントとは独立して実行されるサーバである。このようなサーバは、通常、データセンタに配置された専用ハードウェア上で実行し、より多くの帯域幅及び専用処理能力を提供する。専用サーバは、ほとんどのPCベースのマルチプレイヤーゲームのためのゲームサーバをホストする方法である。大規模なマルチプレイヤーオンラインゲームは、通常、ゲームタイトルを所有しているソフトウェア会社がホストする専用サーバで実行され、コンテンツの制御及び更新をできるようにする。
ブロードキャスト処理サーバ(BPS)3912は、本明細書ではブロードキャスト処理プロバイダとも呼ばれ、オーディオまたはビデオ信号を視聴者に配信する。非常に狭い範囲の視聴者へのブロードキャストは、ナローキャスティングと呼ばれることがある。ブロードキャスト配信の最終レッグは、信号がクライアントデバイス3920-1、3920-2、及び3920-3に到達する方法であり、いくつかの実施形態では、ラジオ局やテレビ局からアンテナ及び受信器に放送で配信されるか、またはケーブルテレビまたはケーブルラジオまたはステーションを介した「無線ケーブル」を通じて配信される。コンピュータネットワーク3906はまた、様々な実施形態において、ラジオ信号またはテレビ信号のいずれかをクライアントデバイス3920-1、3920-2、及び3920-3に持ち込み、特に、マルチキャスティングで信号や帯域幅が共有されることを可能にする。歴史的に、ブロードキャストは、いくつかの実施形態では、例えば全国放送、地域放送など、地理的領域によって区切られている。しかしながら、高速インターネットの急増により、コンテンツは世界のほぼすべての国に到達できるため、ブロードキャストは地域によって定義されていない。
ストレージサービスプロバイダ(SSP)3914は、コンピュータストレージスペースと関連管理サービスを提供する。SSP3914はまた、周期的なバックアップとアーカイブも提供する。ストレージをサービスとして提供することにより、クライアントデバイス3920-1、3920-2、及び3920-3は、ストレージがサービスとして使用されていないときと比較して、より多くのストレージを使用する。別の大きな利点は、SSP3914が、バックアップサービスを含み、クライアントデバイス3920-1、3920-2、及び3920-3は、ハードドライブが故障した場合でもデータを損失しない。さらに、いくつかの実施形態では、複数のSSPは、クライアントデバイス3920-1、3920-2、及び3920-3から受信したデータの全体的または部分的なコピーを有し、クライアントデバイス3920-1、3920-2、及び3920-3が配置されている場所や、クライアントのタイプに関係なく、クライアントデバイス3920-1、3920-2、及び3920-3が効率的な方法でデータにアクセスすることを可能にする。例えば、プレイヤーは、自宅のコンピュータを介して、かつ、プレイヤーの移動中は携帯電話を介して個人ファイルにアクセスする。
通信プロバイダ3916は、クライアントデバイス3920-1、3920-2、及び3920-3への接続を提供する。通信プロバイダ3916の一種は、コンピュータネットワーク3906へのアクセスを提供するインターネットサービスプロバイダ(ISP)である。ISPは、ダイヤルアップ、デジタル加入者線(DSL)、ケーブルモデム、ファイバ、ワイヤレスまたは専用の高速相互接続などのインターネットプロトコルデータグラムを送達するために適切なデータ転送技術を使用して、クライアントデバイス3920-1、3920-2、及び3920-3を接続する。通信プロバイダ3916はまた、いくつかの実施形態では、電子メール、インスタントメッセージング、及びショートメッセージサービス(SMS)テキストメッセージなどのメッセージングサービスを提供する。別のタイプの通信プロバイダは、ネットワークサービスプロバイダ(NSP)であり、これは、コンピュータネットワーク3906への直接バックボーンアクセスを提供することによって、帯域幅またはネットワークアクセスを販売する。ネットワークサービスプロバイダの例には、電気通信会社、データキャリア、ワイヤレス通信プロバイダ、インターネットサービスプロバイダ、高速インターネットアクセスを提供するケーブルテレビ事業者などが含まれる。
データ交換3918は、INSP602内のいくつかのモジュールを相互接続し、これらのモジュールを、コンピュータネットワーク3906を介してクライアントデバイス3920-1、3920-2、及び3920-3に接続する。データ交換3918は、様々な実施形態において、INSP3902のすべてのモジュールが近接している小さな領域をカバーするか、または異なるモジュールが地理的に分散しているときに、広い地理的領域をカバーする。例えば、データ交換3902には、データセンタのキャビネット内の高速ギガビットイーサネットまたは大陸間仮想LANが含まれる。
いくつかの実施形態では、サーバシステム404(図4A)とクライアントデバイス3920-1~3920-3との間の通信は、無線技術を使用して促進され得る。そのような技術には、例えば、5G無線通信技術が含まれ得る。
一実施形態では、本明細書で説明するレガシーゲームNなどのビデオゲームは、ゲーム機、パーソナルコンピュータのいずれかでローカルに実行されるか、またはサーバ上で実行される。場合によっては、ビデオゲームは、データセンタの1つ以上のサーバによって実行される。ビデオゲームが実行されるとき、ビデオゲームのいくつかのインスタンスは、ビデオゲームのシミュレーションであり得る。例えば、ビデオゲームは、ビデオゲームのシミュレーションを生成する環境またはサーバによって実行され得る。いくつかの実施形態では、シミュレーションは、ビデオゲームのインスタンスである。他の実施形態では、シミュレーションは、エミュレータによって生成され得る。いずれの場合も、ビデオゲームがシミュレーションとして表される場合、そのシミュレーションは、ユーザ入力によってインタラクティブにストリーミング、実行、及び/または制御されることができるインタラクティブコンテンツをレンダリングするために実行されることが可能である。
様々な実施形態において、本明細書に記載されるいくつかの実施形態の1つ以上の特徴は、本明細書に記載される残りの実施形態の1つ以上の1つ以上の特徴と組み合わされることに留意されたい。
本開示に記載の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、小型コンピュータ、メインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施されてよい。一実施態様では、本開示に記載の実施形態は、有線または無線ネットワークを通してリンクされたリモート処理デバイスによってタスクが行われる分散コンピューティング環境で実践される。
前述の実施形態を念頭に置いて、一実施態様では、本開示に記載の実施形態は、コンピュータシステムに記憶されたデータを伴う様々なコンピュータ実施動作を採用することを理解されたい。これらの動作は、物理量の物理的操作を要する動作である。本開示に記載の実施形態の一部を形成する本明細書で説明される動作のうちのいずれも、有用な機械動作である。本開示に記載のいくつかの実施形態はまた、これらの動作を行うためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築される、または装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータである。具体的には、一実施形態において、様々な汎用マシンは、本明細書の教示に従って書かれたコンピュータプログラムと共に使用される、または、必要な動作を行うためにさらに特化した装置を構築するほうがより好都合な場合がある。
ある実施態様では、本開示に記載のいくつかの実施形態は、コンピュータ可読媒体上のコンピュータ可読コードとして具体化される。コンピュータ可読媒体は、データを格納することができる任意のデータ格納装置であり、これは、その後、コンピュータシステムによって読み取られることができる。コンピュータ可読媒体の例には、ハードドライブ、ネットワーク接続ストレージ(NAS)、ROM、RAM、CD-ROM、CD-recordable(CD-R)、CD-recordable(CD-RW))、磁気テープ、光学データ記憶装置、非光学データ記憶装置などが含まれる。一例として、コンピュータ可読媒体は、ネットワーク結合コンピュータシステム上に分散されたコンピュータ可読有形媒体を含み、コンピュータ可読コードが分散方式で格納及び実行されるようになっている。
さらに、上述の実施形態のいくつかは、ゲーム環境に関して説明されているが、いくつかの実施形態では、ゲームの代わりに、例えば、ビデオ会議環境などの他の環境が使用される。
本方法の操作は特定の順序で説明されているが、他のハウスキーピング操作が、操作の間に実行され得、もしくは、操作が、わずかに異なる時間に発生するように調整されることができるか、またはシステムに分散されることができ、このことが、重複操作の処理が所望の方法で実行される限り、処理に関連する様々な間隔での処理操作の発生を可能とすることが理解されるべきである。
本開示に記載の前述の実施形態は、理解を明確にするためにある程度詳細に説明したが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。従って、本実施形態は、限定ではなく例示としてみなされるべきであり、本実施形態は、本明細書に記載される詳細に限定されるべきではなく、添付の請求項の範囲及び均等物の中で変更されてよい。