(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-28
(54)【発明の名称】レガシーゲームのプレイ中のユーザ入力のエミュレーションのためのシステム及び方法
(51)【国際特許分類】
A63F 13/22 20140101AFI20240521BHJP
A63F 13/24 20140101ALI20240521BHJP
A63F 13/40 20140101ALI20240521BHJP
【FI】
A63F13/22
A63F13/24
A63F13/40
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023572183
(86)(22)【出願日】2022-03-24
(85)【翻訳文提出日】2023-11-21
(86)【国際出願番号】 US2022021817
(87)【国際公開番号】W WO2022250773
(87)【国際公開日】2022-12-01
(32)【優先日】2021-05-25
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】518187455
【氏名又は名称】ソニー・インタラクティブエンタテインメント エルエルシー
(74)【代理人】
【識別番号】100105924
【氏名又は名称】森下 賢樹
(72)【発明者】
【氏名】コルヴィ、エルネスト
(72)【発明者】
【氏名】ウェイジン、ジョージ
(72)【発明者】
【氏名】タック、デーヴィッド
(57)【要約】
【課題】レガシーゲームのプレイ中のユーザ入力のエミュレーションのための方法が説明される。
【解決手段】方法は、更新されたハンドヘルドコントローラからユーザ入力を受信することと、更新されたハンドヘルドコントローラの更新された入力デバイスを識別するようユーザ入力を解析することとを含む。方法は更新された入力デバイスの識別に基づいてレガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定することを含む。方法は、レガシーハンドヘルドコントローラのレガシー入力デバイスの機能の処理のためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、コードの1つ以上のブロックがキャッシュされていないと判定するとレガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスすることとを含む。方法はレガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルすることを含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用する方法であって、
前記レガシーゲームのプレイ中に、前記更新されたハンドヘルドコントローラからユーザ入力を受信することと、
前記更新されたハンドヘルドコントローラの更新された入力デバイスを識別するように、前記ユーザ入力を解析することと、
前記更新された入力デバイスの機能を判定することと、
前記更新された入力デバイスの前記識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定することと、
前記更新された入力デバイスの前記機能に対応する前記レガシー入力デバイスの機能を識別することと、
前記レガシーハンドヘルドコントローラの前記レガシー入力デバイスの前記機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、
コードの前記1つ以上のブロックがキャッシュされていないと判定すると、前記レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスすることと、
前記レガシーゲームコードの前記1つ以上の命令からコードの前記1つ以上のブロックをコンパイルすることと、
を含む、前記方法。
【請求項2】
コードの前記1つ以上のブロックがキャッシュされていると判定したことに応答して、前記レガシーゲームの仮想環境を修正するように、コードの前記1つ以上のブロックを実行することを更に含む、請求項1に記載の方法。
【請求項3】
前記レガシー入力デバイスの前記識別は、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの識別と、前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの識別との間のデフォルトのマッピングの部分であり、
前記レガシー入力デバイスは、前記複数のレガシー入力デバイスの1つである、請求項1に記載の方法。
【請求項4】
前記レガシー入力デバイスの前記機能は、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの機能と前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの機能との間のデフォルトのマッピングの部分であり、前記レガシー入力デバイスは、前記複数のレガシー入力デバイスの1つであり、前記方法は、
前記デフォルトのマッピングを現在のマッピングに修正するためのユーザ入力が前記更新されたハンドヘルドコントローラから受信されるかどうかを判定することであって、前記デフォルトのマッピングは、ユーザアカウントと関連付けられる、前記判定することと、
前記現在のマッピングを前記ユーザアカウントと関連付けることと、
前記レガシーゲームの前記プレイ中に、前記更新されたハンドヘルドコントローラから追加のユーザ入力を受信することと、
前記更新されたハンドヘルドコントローラの追加の更新された入力デバイスを識別するように、前記追加のユーザ入力を解析することと、
前記追加の更新された入力デバイスの追加の機能を判定することと、
前記追加の更新された入力デバイスの前記識別に基づいて、前記レガシーハンドヘルドコントローラの追加のレガシー入力デバイスの識別を判定することと、
前記更新された入力デバイスの前記追加の機能に対応する前記追加のレガシー入力デバイスの追加の機能を識別することと、
前記追加のレガシー入力デバイスの前記追加の機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、
前記追加の機能を処理するためのコードの前記1つ以上のブロックがキャッシュされていないと判定すると、前記レガシーゲームの前記レガシーゲームコードの1つ以上の命令にアクセスすることと、
前記追加の機能を処理するためのコードの前記1つ以上のブロックがキャッシュされていないと判定すると、前記レガシーゲームコードの前記1つ以上の命令から、前記追加の機能を処理するためのコードの前記1つ以上のブロックをコンパイルすることと、
を更に含む、請求項1に記載の方法。
【請求項5】
コンピュータネットワークを介して、第1のコンピューティングデバイスからサーバシステムに前記現在のマッピングを転送することを更に含み、
前記サーバシステムは、第2のコンピューティングデバイスから前記現在のマッピングのための要求を受信するように構成され、
前記サーバシステムは、前記要求の前記受信に応答して、前記コンピュータネットワークを介して前記第2のコンピューティングデバイスに前記現在のマッピングを送信するように構成される、請求項4に記載の方法。
【請求項6】
前記更新された入力デバイスの前記機能を前記判定することは、
前記ユーザ入力に基づいた前記更新された入力デバイスの移動の方向が予め定められた方向に一致するかどうかを判定することと、
前記更新された入力デバイスの前記移動の方向が前記予め定められた方向に一致すると判定すると、前記更新された入力デバイスの前記移動が予め定められた閾値を超えるかどうかを判定することであって、前記更新された入力デバイスの前記機能は、前記予め定められた方向における前記予め定められた閾値を超える前記更新された入力デバイスの前記移動であると判定される、前記判定することと、
を含む、請求項1に記載の方法。
【請求項7】
前記レガシー入力デバイスの前記機能を前記判定することは、
前記レガシー入力デバイスの前記機能が、前記更新された入力デバイスの前記機能によって達成されるのと同一の結果を達成すると判定することを含む、請求項6に記載の方法。
【請求項8】
前記更新された入力デバイスは、タッチパッドであり、
前記ユーザ入力を前記解析することは、前記タッチパッドの選択が受信されるかどうかを判定することを含み、
前記更新された入力デバイスの前記機能を前記判定することは、
前記タッチパッド上の前記選択の位置を識別することと、
マッピングにアクセスすることと、
を含み、
前記レガシー入力デバイスを前記識別することは、前記マッピングに基づいて、前記レガシーハンドヘルドコントローラ上のボタンを識別することを含み、
前記方法は、前記ボタンの機能に基づいて仮想オブジェクトを生成するように、コードの前記1つ以上のブロックを実行することを更に含み、前記仮想オブジェクトは、画像内の位置において生成され、前記画像内の前記仮想オブジェクトの前記位置は、前記タッチパッド上の前記選択の前記位置に対応する、
請求項1に記載の方法。
【請求項9】
前記仮想オブジェクトは、十字線である、請求項8に記載の方法。
【請求項10】
前記更新された入力デバイスは、前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの1つであり、前記レガシー入力デバイスは、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの1つであり、前記方法は、
前記更新されたハンドヘルドコントローラのタイプを受信することと、
前記更新されたハンドヘルドコントローラのサブタイプを受信することと、
前記更新されたハンドヘルドコントローラの前記タイプ及び前記サブタイプから、前記複数の更新された入力デバイスと前記レガシーハンドヘルドコントローラの前記複数のレガシー入力デバイスとの間のデフォルトのマッピングを識別することであって、前記レガシー入力デバイスは、前記デフォルトのマッピングに基づいて識別される、前記識別することと、
を更に含む、請求項1に記載の方法。
【請求項11】
レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用するシステムであって、
1つ以上のプロセッサであって、
前記レガシーゲームのプレイ中に、前記更新されたハンドヘルドコントローラからユーザ入力を受信することと、
前記更新されたハンドヘルドコントローラの更新された入力デバイスを識別するように、前記ユーザ入力を解析することと、
前記更新された入力デバイスの機能を判定することと、
前記更新された入力デバイスの前記識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定することと、
前記更新された入力デバイスの前記機能に対応する前記レガシー入力デバイスの機能を識別することと、
前記レガシーハンドヘルドコントローラの前記レガシー入力デバイスの前記機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、
コードの前記1つ以上のブロックがキャッシュされていないとの前記判定に応答して、前記レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスすることと、
前記レガシーゲームコードの前記1つ以上の命令からコードの前記1つ以上のブロックをコンパイルすることと、
を行うように構成される、前記1つ以上のプロセッサと、
前記1つ以上のプロセッサに結合されたメモリデバイスと、
を備えた、前記システム。
【請求項12】
前記1つ以上のプロセッサに結合されたキャッシュを更に備え、
前記キャッシュは、コードの前記1つ以上のブロックを格納するように結合され、
前記1つ以上のプロセッサは、前記レガシーゲームの仮想環境を修正するように、コードの前記1つ以上のブロックを実行するように構成される、請求項11に記載のシステム。
【請求項13】
前記レガシー入力デバイスの前記識別は、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの識別と、前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの識別との間のデフォルトのマッピングの部分であり、
前記レガシー入力デバイスは、前記複数のレガシー入力デバイスの1つである、請求項11に記載のシステム。
【請求項14】
前記レガシー入力デバイスの前記機能は、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの機能と前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの機能との間のデフォルトのマッピングの部分であり、前記レガシー入力デバイスは、前記複数のレガシー入力デバイスの1つであり、前記1つ以上のプロセッサは、
前記デフォルトのマッピングを現在のマッピングに修正するためのユーザ入力が前記更新されたハンドヘルドコントローラから受信されるかどうかを判定することであって、前記デフォルトのマッピングは、ユーザアカウントと関連付けられる、前記判定することと、
前記現在のマッピングを前記ユーザアカウントと関連付けることと、
前記レガシーゲームの前記プレイ中に、前記更新されたハンドヘルドコントローラから追加のユーザ入力を受信することと、
前記更新されたハンドヘルドコントローラの追加の更新された入力デバイスを識別するように、前記追加のユーザ入力を解析することと、
前記追加の更新された入力デバイスの追加の機能を判定することと、
前記追加の更新された入力デバイスの前記識別に基づいて、前記レガシーハンドヘルドコントローラの追加のレガシー入力デバイスの識別を判定することと、
前記更新された入力デバイスの前記追加の機能に対応する前記追加のレガシー入力デバイスの追加の機能を識別することと、
前記追加のレガシー入力デバイスの前記追加の機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、
前記追加の機能を処理するためのコードの前記1つ以上のブロックがキャッシュされていないと判定すると、前記レガシーゲームの前記レガシーゲームコードの1つ以上の命令にアクセスすることと、
前記追加の機能を処理するためのコードの前記1つ以上のブロックがキャッシュされていないと判定すると、前記レガシーゲームコードの前記1つ以上の命令から、前記追加の機能を処理するためのコードの前記1つ以上のブロックをコンパイルすることと、
を行うように構成される、請求項11に記載のシステム。
【請求項15】
前記1つ以上のプロセッサに結合されたネットワークコントローラインタフェースを更に備え、前記ネットワークコントローラインタフェースは、
コンピュータネットワークを介して、第1のコンピューティングデバイスからサーバシステムに前記現在のマッピングを転送することを行うように構成され、
前記サーバシステムは、第2のコンピューティングデバイスから前記現在のマッピングのための要求を受信するように構成され、
前記サーバシステムは、前記要求の前記受信に応答して、前記コンピュータネットワークを介して前記第2のコンピューティングデバイスに前記現在のマッピングを送信するように構成される、
請求項14に記載のシステム。
【請求項16】
前記更新された入力デバイスの前記機能を判定するために、前記1つ以上のプロセッサは、
前記ユーザ入力に基づいた前記更新された入力デバイスの移動の方向が予め定められた方向に一致するかどうかを判定することと、
前記更新された入力デバイスの前記移動の方向が前記予め定められた方向に一致すると判定すると、前記更新された入力デバイスの前記移動が予め定められた閾値を超えるかどうかを判定することであって、前記更新された入力デバイスの前記機能は、前記予め定められた方向における前記予め定められた閾値を超える前記更新された入力デバイスの前記移動であると判定される、前記判定することと、
を行うように構成される、請求項11に記載のシステム。
【請求項17】
前記レガシー入力デバイスの前記機能を判定するために、前記プロセッサは、
前記レガシー入力デバイスの前記機能が、前記更新された入力デバイスの前記機能によって達成されるのと同一の結果を達成すると判定することを行うように構成される、請求項16に記載のシステム。
【請求項18】
前記更新された入力デバイスは、タッチパッドであり、
前記ユーザ入力を解析するために、前記1つ以上のプロセッサは、前記タッチパッドの選択が受信されるかどうかを判定するように構成され、前記更新された入力デバイスの前記機能を判定するために、前記1つ以上のプロセッサは、前記タッチパッド上の前記選択の位置を識別するように構成され、
前記1つ以上のプロセッサは、マッピングにアクセスするように構成され、
前記レガシー入力デバイスを識別するために、前記1つ以上のプロセッサは、前記マッピングに基づいて、前記レガシーハンドヘルドコントローラ上のボタンを識別することであって、前記ボタンは前記レガシー入力デバイスである、前記識別することを行うように構成され、
前記1つ以上のプロセッサは、前記ボタンの機能に基づいて仮想オブジェクトを生成するように、コードの前記1つ以上のブロックを実行するように構成され、
前記仮想オブジェクトは、画像内の位置において生成され、
前記画像内の前記仮想オブジェクトの前記位置は、前記タッチパッド上の前記選択の前記位置に対応する、
請求項11に記載のシステム。
【請求項19】
前記更新された入力デバイスは、前記更新されたハンドヘルドコントローラの複数の更新された入力デバイスの1つであり、前記レガシー入力デバイスは、前記レガシーハンドヘルドコントローラの複数のレガシー入力デバイスの1つであり、前記1つ以上のプロセッサは、
前記更新されたハンドヘルドコントローラのタイプを受信することと、
前記更新されたハンドヘルドコントローラのサブタイプを受信することと、
前記更新されたハンドヘルドコントローラの前記タイプ及び前記サブタイプから、前記複数の更新された入力デバイスと前記レガシーハンドヘルドコントローラの前記複数のレガシー入力デバイスとの間のデフォルトのマッピングを識別することであって、前記レガシー入力デバイスは、前記デフォルトのマッピングに基づいて識別される、前記識別することと、
を行うように更に構成される、請求項11に記載のシステム。
【請求項20】
レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用するシステムであって、
更新された入力デバイスを有する前記更新されたハンドヘルドコントローラであって、前記更新されたハンドヘルドコントローラは、前記レガシーゲームのプレイ中に、ユーザ入力を生成するように構成される、前記更新されたハンドヘルドコントローラと、
前記更新されたハンドヘルドコントローラに結合されたコンピューティングデバイスと、
を備え、前記コンピューティングデバイスは、
前記更新されたハンドヘルドコントローラから前記ユーザ入力を受信することと、
前記更新されたハンドヘルドコントローラの前記更新された入力デバイスを識別するように、前記ユーザ入力を解析することと、
前記更新された入力デバイスの機能を判定することと、
前記更新された入力デバイスの前記識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定することと、
前記更新された入力デバイスの前記機能に対応する前記レガシー入力デバイスの機能を識別することと、
前記レガシーハンドヘルドコントローラの前記レガシー入力デバイスの前記機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、
コードの前記1つ以上のブロックがキャッシュされていないとの前記判定に応答して、前記レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスすることと、
前記レガシーゲームコードの前記1つ以上の命令からコードの前記1つ以上のブロックをコンパイルすることと、
を行うように構成される、前記システム。
【請求項21】
前記コンピューティングデバイスは、キャッシュを含み、
前記キャッシュは、コードの前記1つ以上のブロックを格納するように構成され、
前記コンピューティングデバイスは、前記レガシーゲームの仮想環境を修正するように、コードの前記1つ以上のブロックを実行するように構成される、請求項20に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、レガシーゲームのプレイ中のユーザ入力のエミュレーションのためのシステム及び方法に関する。
【背景技術】
【0002】
電子ゲーム及びネットワーキング技術がより高度になるにつれて、それに応じてゲームの複雑性が増している。その結果、より複雑な筋書きと、ゲームプレイの目的、ミッション及びタスクと、ゲームプレイのアバターに関連する能力と、スコアリングと、が存在し得る。スコアリングは、様々な方法で発生及び重み付けされ得、同様に様々なカテゴリで、または個人またはチームベースで決定され得る。
【0003】
前述の問題の重大性は、電子ゲームの複雑性が増すにつれてのみ増加する。そのため、一部のプレイヤーは、より複雑ではない古いゲームをプレイしたいと望むことがある。
【0004】
この文脈において、本発明の実施形態が生じる。
【発明の概要】
【0005】
本開示の実施形態は、レガシーゲームのプレイ中のユーザ入力のエミュレーションのためのシステム及び方法を提供する。
【0006】
一実施形態では、レガシーゲームのプレイを容易にする方法が説明される。方法は、レガシーゲームのプレイ中にユーザ入力を受信することと、ユーザ入力を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、コードの1つ以上のブロックがキャッシュされていないと判定すると、レガシーゲームコードの1つ以上の命令にアクセスすることと、を含む。方法はさらに、レガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルすることと、コードの1つ以上のブロックをキャッシュすることと、仮想環境を表示するように、コードの1つ以上のブロックを実行することと、を含む。
【0007】
実施形態では、レガシーゲームのプレイを容易にするコンピューティングデバイスが説明される。コンピューティングデバイスは、レガシーゲームのプレイ中にユーザ入力を受信するように構成されたプロセッサを含む。コンピューティングデバイスはさらに、プロセッサに結合されたキャッシュ及びプロセッサに結合されたメモリデバイスを含む。プロセッサは、ユーザ入力を処理するためのコードの1つ以上のブロックがキャッシュに格納されているかどうかを判定する。プロセッサは、コードの1つ以上のブロックがキャッシュに格納されていないと判定すると、メモリデバイスから、レガシーゲームコードの1つ以上の命令にアクセスする。また、プロセッサは、レガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルする。プロセッサは、キャッシュ内にコードの1つ以上のブロックを格納し、仮想環境を表示するように、コードの1つ以上のブロックを実行する。
【0008】
一実施形態では、方法が説明される。方法は、レガシーゲームコードの1つ以上の命令から第1の検証結果を生成することを含む。レガシーゲームコードの1つ以上の命令は、コードの1つ以上のブロックと関連付けられる。方法はさらに、コードの1つ以上のブロックが無効としてマークされることになるかどうかを判定するように、1つ以上の命令と関連付けられた1つ以上のメモリアドレスを検査することを含む。方法は、コードの1つ以上のブロックが実行されることになるかどうかを判定することと、コードの1つ以上のブロックが実行されることになると判定すると、コードの1つ以上のブロックが無効としてマークされるかどうかを判定することと、を含む。方法は、1つ以上の命令から第2の検証結果を生成するように、1つ以上のメモリアドレスを検査することと、コードの1つ以上のブロックが無効であるかどうかを判定するように、第1の検証結果を第2の検証結果と比較することと、コードの1つ以上のブロックが無効であると判定すると、1つ以上の命令と関連付けられたコードの1つ以上の追加のブロックを再コンパイルすることと、を含む。方法は、仮想環境を表示するように、コードの1つ以上の追加のブロックを実行することを含む。
【0009】
実施形態では、レガシーゲームのプレイ中のユーザ入力のエミュレーションのための方法が説明される。方法は、レガシーゲームのプレイ中に更新されたハンドヘルドコントローラからユーザ入力を受信することと、更新されたハンドヘルドコントローラの更新された入力デバイスを識別するように、ユーザ入力を解析することと、更新された入力デバイスの機能を判定することと、を含む。方法はさらに、更新された入力デバイスの識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定することを含む。方法は、更新された入力デバイスの機能に対応するレガシー入力デバイスの機能を識別することと、レガシーハンドヘルドコントローラのレガシー入力デバイスの機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定することと、コードの1つ以上のブロックがキャッシュされていないと判定すると、レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスすることと、を含む。方法は、レガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルすることを含む。
【0010】
一実施形態では、レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用するシステムが説明される。システムは、レガシーゲームのプレイ中に、更新されたハンドヘルドコントローラからユーザ入力を受信するように構成された1つ以上のプロセッサを含む。1つ以上のプロセッサは、更新されたハンドヘルドコントローラの更新された入力デバイスを識別するように、ユーザ入力を解析し、更新された入力デバイスの機能を判定するようにさらに構成される。1つ以上のプロセッサは、更新された入力デバイスの識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定するように構成される。1つ以上のプロセッサは、更新された入力デバイスの機能に対応するレガシー入力デバイスの機能を識別し、レガシーハンドヘルドコントローラのレガシー入力デバイスの機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定するように構成される。1つ以上のプロセッサは、コードの1つ以上のブロックがキャッシュされていないとの判定に応じて、レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスするように構成される。1つ以上のプロセッサは、レガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルするように構成される。メモリデバイスは1つ以上のプロセッサに結合される。
【0011】
実施形態では、レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用するシステムが説明される。更新されたハンドヘルドコントローラは、更新された入力デバイスを有する。更新されたハンドヘルドコントローラは、レガシーゲームのプレイ中に、ユーザ入力を生成するように構成される。コンピューティングデバイスは、更新されたハンドヘルドコントローラに結合される。コンピューティングデバイスは、更新されたハンドヘルドコントローラからユーザ入力を受信し、更新されたハンドヘルドコントローラの更新された入力デバイスを識別するように、ユーザ入力を解析し、更新された入力デバイスの機能を判定するように構成される。コンピューティングデバイスは、更新された入力デバイスの識別に基づいて、レガシーハンドヘルドコントローラのレガシー入力デバイスの識別を判定するように構成される。コンピューティングデバイスは、更新された入力デバイスの機能に対応するレガシー入力デバイスの機能を識別し、レガシーハンドヘルドコントローラのレガシー入力デバイスの機能を処理するためのコードの1つ以上のブロックがキャッシュされているかどうかを判定し、コードの1つ以上のブロックがキャッシュされていないとの判定に応じて、レガシーゲームのレガシーゲームコードの1つ以上の命令にアクセスするようにさらに構成される。コンピューティングデバイスは、レガシーゲームコードの1つ以上の命令からコードの1つ以上のブロックをコンパイルするように構成される。
【0012】
レガシーコードを更新されたコードに変換するための本明細書に記載のシステム及び方法の利点のいくつかは、レガシーコードの機能が更新されたマシンによって実行されることを可能にすること含む。変換しないと、セキュリティ上の問題により、レガシーコードの機能が、更新されたマシンによって実行されることができない。例えば、更新されたマシンからレガシーコードを実行し、レガシーコードの実行時に生成されたデータを更新されたマシンのレジスタに書き込む権限はない。そのため、変換を提供することにより、更新されたマシンによるレガシーコードの機能の実行が容易になる。
【0013】
本明細書に記載のシステム及び方法のさらなる利点には、実行時間を節約することが含まれる。一例として、レガシーコードのルーチンとサブルーチンまたは2つの同様の命令などの2つ以上の命令が、更新されたコードの1つの基本ブロックに結合される。そのため、更新されたコードの実行は、レガシーコードの実行と比較して高速である。
【0014】
レガシーコードを更新されたコードに変換するための本明細書に記載のシステム及び方法のさらなる利点は、更新されたコードの1つ以上の基本ブロックが無効であると判定したときに、更新されたコードの1つ以上の追加の基本ブロックを再コンパイルすることを含む。例えば、1つ以上の基本ブロックが無効としてマークされているとき、1つ以上の基本ブロックが実際に無効であるかどうかが判定される。そのように判定すると、1つ以上の基本ブロックを実行する代わりに、1つ以上の追加の基本ブロックがコンパイル及び実行される。1つ以上の追加の基本ブロックは、1つ以上の基本ブロックが対応する同じゲームに対応する。
【0015】
レガシーコードを更新されたコードに変換するための本明細書で説明するシステム及び方法の別のさらなる利点は、すべての基本ブロックが無効であるかどうかチェックされる必要がないことを含む。例えば、基本ブロックのコンパイル後に無効としてマークされた基本ブロックのみが有効かどうかがチェックされる。このことは、1つ以上の基本ブロックから仮想環境を表示する際のレイテンシを短縮する。また、すべての基本ブロックの無効性をチェックするために使用される処理能力は必要とされない。
【0016】
また、レガシーコードを更新されたコードに変換するための本明細書に記載のシステム及び方法の利点には、ゲームの更新されたコードがすでにコンパイルされているときの処理時間及び処理能力の節約が含まれる。更新されたコードがサーバまたはゲームコンソールで生成されると、更新されたコードは再コンパイルされる必要がない。むしろ、更新されたコードが、サーバまたはゲームコンソールから別のゲームコンソールに転送されることができる。そのため、他のゲームコンソールで更新されたコードを再生成する際の処理時間と処理能力が節約される。
【0017】
レガシーゲームのプレイ中にユーザ入力をエミュレーションするための本明細書に記載のシステム及び方法の追加の利点には、レガシーゲームをプレイするために更新されたハンドヘルドコントローラを使用することが含まれる。入力エミュレータは、更新されたハンドヘルドコントローラから受信したユーザ入力をレガシーハンドヘルドコントローラのユーザ入力に変換するために使用される。更新されたハンドヘルドコントローラから受け取ったユーザ入力の変換により、更新されたハンドヘルドコントローラを使用するレガシーゲームのプレイが容易になる。
【0018】
本開示の他の態様は、本開示に記載された実施形態の原理を例示として示す、添付の図面と併せて取られた以下の発明を実施するための形態から明らかになるであろう。
【0019】
本開示の様々な実施形態は、添付の図面と併せて以下の説明を参照することによって最もよく理解することができる。
【図面の簡単な説明】
【0020】
【
図1】更新されたコードの基本ブロックを生成するためのシステムの実施形態を示すブロック図である。
【
図2】ゲームコードの基本ブロックをコンパイル及び実行するための方法の実施形態を示すフローチャートである。
【
図3】基本ブロックをコンパイル及び実行するためのシステムの実施形態を示すブロック図である。
【
図4A】ゲームコンソール内の基本ブロックのコンパイルを説明するためのシステムの実施形態の図である。
【
図4B】サーバシステム内の基本ブロックのコンパイルを説明するためのシステムの実施形態の図である。
【
図5A】基本ブロックの一実施形態を説明するための図である。
【
図5B】基本ブロックコンパイラによって実行されるコンパイル操作の実施形態を示すための図である。
【
図6A】エミュレーションプロセッサシステムの構成要素を示すシステムの実施形態の図である。
【
図6B】基本ブロックをコンパイル及び実行するための方法の実施形態を示すフローチャートである。
【
図6C】異なるユーザ入力に対して、異なる基本ブロックが動的にコンパイルされることを示すシステムの実施形態の図である。
【
図7A】メモリデバイスからのエミュレートされた処理ユニット(PU)コードの削除を示すシステムの実施形態の図である。
【
図7B】エミュレートされたPUコードをメモリデバイスから削除するための方法の実施形態を示すフローチャートである。
【
図8A】基本ブロックの検証を示すエミュレーションプロセッサシステムの実施形態の図である。
【
図8B】
図8Aのエミュレーションプロセッサシステムによって実行される検証操作を示す方法の実施形態のフローチャートである。
【
図9A】レガシーマシンの実施形態を示す図である。
【
図9B】更新されたマシンの実施形態を示す図である。
【
図10A】基本ブロックコンパイラによる複数の基本ブロックの1つの基本ブロックへの結合を示すシステムの実施形態の図である。
【
図10B】1つ以上の基本ブロックの修正を示すシステムの実施形態の図である。
【
図10C】サブルーチンに基づいて作成された基本ブロックと、サブルーチンを呼び出すエミュレートされたPUコード命令に基づいて生成された基本ブロックとを組み合わせることを示すシステムの実施形態の図である。
【
図10D】2つの基本ブロックの間への基本ブロックの挿入を示すシステムの実施形態の図である。
【
図10E】基本ブロックの実行の順序でスイッチを示すシステムの実施形態の図である。
【
図11A】基本ブロックnに格納されたサイクル数のカウントの使用を説明するための方法の実施形態のフローチャートである。
【
図12】第1のクライアントデバイスから第2のクライアントデバイスへの基本ブロックの転送を説明するためのシステムの実施形態の図である。
【
図13】レガシーゲームのプレイ中に更新されたハンドヘルドコントローラから受信したユーザ入力のエミュレーションを説明するためのシステムの実施形態の図である。
【
図14A-1】デフォルトのマッピングから現在のマッピングへの変更を説明するためのシステムの実施形態の図である。
【
図14A-2】デフォルトのマッピング及び現在のマッピングを説明するためのメモリデバイスの実施形態の図である。
【
図14B】レガシーゲームのプレイ中のデフォルトのマッピングの代わりに現在のマッピングの使用を説明するためのシステムの実施形態の図である。
【
図15】更新されたハンドヘルドコントローラの右サムスティックの動きに基づいたレガシーハンドヘルドコントローラの右移動ボタンの識別を説明するためのシステムの実施形態の図である。
【
図16A】タッチパッドがユーザにより選択されたときの、十字線の仮想画像の生成を説明するためのシステムの実施形態の図である。
【
図16B】ユーザによるタッチパッド上での選択の場所と画像フレーム上の十字線の場所との間の対応を説明するためのシステムの実施形態の図である。
【
図17】異なるタイプのハンドヘルドコントローラを使用した異なるマッピングの使用を説明するためのシステムの実施形態の図である。
【
図18】ゲームコンソールから別のゲームコンソールへの現在のマッピングの通信を説明するためのシステムの実施形態の図である。
【
図19A】更新されたハンドヘルドコントローラのタイプとサブタイプの受信を説明する画像のスクリーンショットである。
【
図19B】更新されたハンドヘルドコントローラのタイプを受信するためのメニューを説明するための画像のスクリーンショットである。
【
図20】レガシーハンドヘルドコントローラと更新されたハンドヘルドコントローラの入力デバイス間のマッピングを説明するための画像のスクリーンショットの実施形態である。
【
図21】本開示の実施態様に従って、クラウドビデオゲームをクライアントデバイスにストリーミングするために実行される様々な操作を概念的に示すフロー図である。
【
図22】クライアントデバイスのディスプレイデバイスとのインターフェースと互換性があり、コンピュータネットワークを介してゲームホスティングシステムと通信することができるゲームコンソールの実施形態のブロック図である。
【
図23】ヘッドマウントディスプレイ(HMD)の構成要素を示す図である。
【
図24】情報サービスプロバイダ(INSP)アーキテクチャの実施形態を示している。
【発明を実施するための形態】
【0021】
レガシーゲームプレイ中のユーザ入力のエミュレーションのためのシステム及び方法が説明されている。本開示の様々な実施形態は、これらの具体的な詳細の一部または全部を伴わずに実施されることに留意されたい。他の事例では、本開示の様々な実施形態を不必要に不明瞭にしないために、周知のプロセス操作は詳細に説明されていない。
【0022】
図1は、更新されたコードの基本ブロック1~nまでを生成するためのシステム100の実施形態を示すブロック図であり、ここで、nは正の整数である。システム100は、キャッシュ102と、基本ブロックコンパイラ104と、ゲームタイトルGNを有するレガシーゲームNのエミュレートされた処理ユニット(PU)コード106と、を含み、ここで、Nは正の整数である。一例として、本明細書で使用されるキャッシュは、データを格納するハードウェアまたはソフトウェアの構成要素であり、そのため、データに対する将来の要求がより高速に処理され得る。キャッシュヒットは、要求されたデータがキャッシュ内で見つけられ得るときに発生し、一方でキャッシュミスは、見つけられ得ないときに発生する。キャッシュヒットは、キャッシュからデータを読み取ることによって処理され、これは、結果を再計算することや、またはメモリデバイスなどのより低速のデータストアから読み取ることよりも高速であり、そのため、キャッシュから処理できるリクエストが多いほど、システムがより高速に実行する。説明すると、キャッシュはレジスタのグループであり、これは、メインメモリデバイスと比較して、10倍~100倍など、より高速にアクセスされ得る。
【0023】
一例として、キャッシュは、メインメモリデバイスよりも少ないメモリアドレスの数を有している。この例では、プロセッサは、操作で使用されるデータがキャッシュ内のメモリアドレスに格納されているかどうかを最初に判定し、そうでない場合は、プロセッサがメインメモリデバイスのメモリアドレスにアクセスしてデータを探す。
【0024】
一例として、本明細書で使用される基本ブロックコンパイラは、エミュレートされたPUコード106コードを、更新されたコードの例であるゲームコードGCNに変換するコンピュータプログラムである。ゲームコードGCNは、レガシーゲームNの機能を表す。コンピュータプログラムは、エミュレーションプロセッサシステムの1つ以上のプロセッサによって実行される。ゲームコードGCNは、本明細書では中間コードと称される。一例として、中間コードは、ソースコードでもマシンコードでもない。説明すると、中間コードには、更新されたマシンの中央処理装置(CPU)のアーキテクチャ、またはグラフィック処理装置(GPU)のアーキテクチャに固有ではない基本ブロックが含まれており、その例が以下に提供されている。例示では、中間コードは、更新されたマシンのCPUまたはGPUで実行され得る基本ブロックを含み、その例には、ゲームコンソール、デスクトップコンピュータ、ラップトップコンピュータ、タブレット、スマートフォン、スマートテレビが含まれる。一例として、ソースコードは、プレーンテキストであり得る、人間が可読なプログラミング言語を使用して記述されている。一例として、本明細書で使用される基本ブロックコンパイラは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせを使用して実装される。説明すると、基本ブロックコンパイラの機能は、コントローラもしくはプログラマブルロジックデバイス(PLD)または特定用途向け集積回路(ASIC)を使用して実装される。
【0025】
本明細書で使用されるコントローラの例には、プロセッサ及びメモリデバイスが含まれる。プロセッサはメモリデバイスに結合されている。本明細書で使用される場合、一例として、プロセッサは、マイクロプロセッサ、またはCPU、またはGPU、またはマイクロコントローラ、またはASIC、またはPLDである。本明細書で使用されるメモリデバイスの例には、ランダムアクセスメモリ(RAM)及び読み取り専用メモリ(ROM)が含まれる。説明すると、メモリデバイスは、フラッシュメモリデバイス、またはハードディスク、またはソリッドステートストレージデバイス、または独立ディスクの冗長アレイ(RAID)、またはそれらの組み合わせである。
【0026】
エミュレートされたPUコード106の例は、マシンコードであり、これは操作を実行するようにレガシーマシンのCPUまたはGPUなどのプロセッサに指示する。例えば、エミュレートされたPUコード106は、CPUのレジスタ内に格納されたデータに対してロード、ストア、ジャンプ、または算術論理操作ユニット(ALU)操作などの特定の操作を実行するようにレガシーマシンのCPUに指示する命令のシーケンスを含む。別の例として、エミュレートされたPUコード106は、一連の1と0を含むバイナリコードである。別の例として、エミュレートされたPUコード106は、一連の命令を含み、これは、レガシーマシンのGPUが、GPUのレジスタ内に格納されたデータに対してロード、ストア、ジャンプ、またはALU操作などの特定の操作を実行するように指示する。レガシーマシンのGPUは、仮想オブジェクトに対して操作を実行し、色、強度、陰影、テクスチャ、またはそれらの組み合わせなどのグラフィカルパラメータを仮想オブジェクトに割り当てる。仮想オブジェクトの例には、仮想車両、仮想動物、仮想ゲームキャラクタ、仮想静止オブジェクト、仮想建物などが含まれる。
【0027】
エミュレートされたPUコード106は、レガシーマシンのCPUまたはGPUのアーキテクチャに特定または独自のものである。例えば、エミュレートされたPUコード106は、更新されたマシンのCPUまたはGPUによって実行されることができない。別の例として、エミュレートされたPUコード106は、レガシーマシンでは実行可能であるが、更新されたマシンでは実行できない。
【0028】
一例として、エミュレートされたPUコード106は、レガシーゲームNで操作を実行するためにレガシーマシンのプロセッサによって実行される。説明すると、エミュレートされたPUコード106は、レガシーマシン上でレガシーゲームをプレイするために実行される。レガシーゲームの例には、戦闘機ゲーム、ダンスレッスンゲーム、アドベンチャゲーム、アクションゲームなどのビデオゲームが含まれる。説明すると、レガシーゲームはゲーム開発者によって更新されていない。さらに説明するために、レガシーゲームの現在のバージョンはない。別のさらなる説明として、レガシーゲームは、現在のゲームの作成の何年も前に作成されたものである。
【0029】
基本ブロックコンパイラ104は、レガシーゲームNのエミュレートされたPUコード106にアクセスし、エミュレートされたPUコード106を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。一例として、各基本ブロック1~nは、ある基本ブロックを別の基本ブロックと区別するための開始識別子と終了識別子を有する。基本ブロックコンパイラ104は、基本ブロック1~nをキャッシュ102に格納する。基本ブロック1~nが実行されると、レガシーゲームNがエミュレートされる。
【0030】
図2は、ゲームコードGCNの基本ブロックをコンパイル及びディスパッチするための方法200の実施形態を示すフローチャートである。方法200は、更新されたマシンの1つ以上のプロセッサによって実行される。方法200は、キャッシュヒットがあるかどうか、例えば、基本ブロックがキャッシュ102に格納されているかどうかを判定する操作202を含む。例えば、操作202は、レガシーゲームのプレイ中のユーザ入力が受信されたときに実行またはトリガーされる。説明すると、ユーザ入力は、レガシーゲームNの仮想オブジェクトの位置もしくは方向、またはそれらの組み合わせを変更するために受信されている。図示では、ユーザ入力が受信されたと判定されると、基本ブロック1~nのうちの1つのような基本ブロックが、キャッシュ102に格納されているかどうかが判定されている(
図1)。図示では、仮想オブジェクトの位置もしくは方向、またはそれらの組み合わせを変更するために基本ブロックが実行されている。
【0031】
別の説明として、操作202は、レガシーゲームの仮想オブジェクトのルックアンドフィールなどのパラメータを変更するためのユーザ入力が受信されたときに実行される。図示では、ユーザ入力が受信されたと判定すると、基本ブロック1~nのうちの1つなどの基本ブロックがキャッシュ102に格納されているかどうかが判定される。図示では、仮想オブジェクトのパラメータを変更するために基本ブロックが実行されている。
【0032】
基本ブロックがキャッシュされていると判定することに応じて、方法200の操作204では、基本ブロックがディスパッチされる。例えば、基本ブロックは、操作204で実行されるか、または動作する。説明すると、基本ブロックは、更新されたマシンのCPUによって実行され、仮想オブジェクトをある位置から別の位置に、もしくはある方向から別の方向に、またはそれらの組み合わせで動かす。別の説明として、基本ブロックは、パラメータを仮想オブジェクトの一部に割り当てるために更新されたマシンのGPUによって実行される。仮想オブジェクトの一部分の一例には、仮想オブジェクトのピクセル、または仮想オブジェクトの三角形の部分、または仮想オブジェクトの事前規定された形状の一部分が含まれる。説明すると、仮想オブジェクトは、事前に決定された数のピクセルに分割され、各ピクセルにはパラメータの値が割り当てられる。
【0033】
基本ブロックがキャッシュされていないとの判定に応じて、基本ブロックをコンパイルする操作206が方法200で実行される。操作206は、基本ブロックコンパイラ104(
図1)によって実行される。例えば、基本ブロックコンパイラ104は、レガシーゲームNのエミュレートされたPUコード106(
図1)を解析して、操作202の前に、レガシーゲームのプレイ中に受信したユーザ入力を処理するための機能を含むエミュレートされたPUコード命令を識別する。操作202の前に受信されたユーザ入力は、操作202をトリガーする。説明すると、基本ブロックコンパイラ104は、エミュレートされたPUコード106の各エミュレートされたコードPU命令をトラバースして、エミュレートされたコードPUコード命令が、レガシーゲームのプレイ中に受信したユーザ入力を満たす(例えば、応答を生成する)操作(機能など)を含むかどうかを判定する。図示では、機能が識別されると、基本ブロックコンパイラ104は、エミュレートされたコードのPUコード命令を変換して、基本ブロックを生成する。図示では、受信したユーザ入力に応じて、操作202の前に、ユーザ入力を処理するために必要とされないレガシーゲームの他のエミュレートされたコードPUコード命令は、基本ブロックコンパイラ104によって基本ブロックにコンパイルされない。
【0034】
方法200の操作208において、操作206で生成された基本ブロックは、基本ブロックコンパイラ104によってキャッシュ102に格納される。次に、キャッシュされた基本ブロックは、操作204で実行され、操作202の前に受信したユーザ入力を処理する。
【0035】
一実施形態では、方法200は、サーバシステムの1つ以上のプロセッサによって実行される。一例として、サーバシステムは、更新されたマシンをサーバとして含む。説明すると、各サーバブレードは、ゲームコンソールなどの更新されたマシンである。
【0036】
一実施形態では、方法200は、ユーザ入力が受信されるまで実行されない。例えば、基本ブロック1~nのうちの1つなどの基本ブロックが、キャッシュ102に格納されているかどうかの判定はされず、基本ブロックのコンパイルも、ユーザ入力が受信されるまで基本ブロックの実行もされない。
【0037】
一実施形態では、基本ブロックコンパイラ104は、レガシーゲームNのプレイ中の第1のユーザ入力に応じて、基本ブロック1~nのうちの1つ以上をコンパイルし、レガシーゲームNのプレイ中の第2のユーザ入力に応じて、基本ブロック1~nのうちの残りの1つ以上をコンパイルする。説明すると、基本ブロックコンパイラ104は、第1のユーザ入力を処理するために基本ブロック1及び2を生成し、第2のユーザ入力を処理するために基本ブロック3~7を生成する。第2のユーザ入力は、第1のユーザ入力の後に受信される。
【0038】
図3は、基本ブロック1~nなどの基本ブロックをコンパイル及びディスパッチするためのシステム304の実施形態を説明するためのブロック図である。システム300は、基本ブロックコンパイラ104、キャッシュ102、及びブロックディスパッチャ302を含む。一例として、ブロックディスパッチャ302は、ハードウェアもしくはソフトウェア、またはそれらの組み合わせであり、ユーザ入力を処理するために基本ブロック1~nのうちの1つ以上の操作を実行する。説明すると、ブロックディスパッチャ302は、PLDまたはASICまたはコントローラである。別の説明として、ブロックディスパッチャ302は、コンピュータソフトウェアである。一例として、ブロックディスパッチャ302は、更新されたマシンのGPUまたはCPUである。
【0039】
基本ブロックコンパイラ104は、操作コード(オペコード)などのエミュレートされたPUコード106(
図1)の一部分を復号化し、その部分を、更新されたマシンのプロセッシングユニットのための中間表現に変換する。例えば、基本ブロックコンパイラ104は、1つ以上の命令など、エミュレートされたPUコード106のCPUコードの部分を解析して、CPUコードの一部分がユーザ入力を処理するための機能を含むかどうかを判定する。そのように判定すると、基本ブロックコンパイラ104は、CPUコードの一部分を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。別の例として、基本ブロックコンパイラ104は、1つ以上の命令などのエミュレートされたPUコード106のGPUコードの一部分を解析して、GPUコードの一部分が、ユーザ入力を処理する機能を含むかどうかを判定する。そのように判定すると、基本ブロックコンパイラ104は、GPUコードの一部分を、基本ブロック1~nなどの1つ以上の基本ブロックに変換する。
【0040】
また、基本ブロックコンパイラ104は、エミュレートされたPUコード106の一部分から生成された各基本ブロックの実行のサイクル数を推定して、推定カウントを生成する。例えば、基本ブロックコンパイラ104は、基本ブロック1がジャンプ動作を含み、ジャンプ動作が所定の時間を要すると判定する。基本ブロックコンパイラ104は、基本ブロック1のジャンプ動作が所定の時間を要すると推定する。ブロックコンパイラ104は、推定されたカウントをキャッシュ102に格納する。例えば、ブロックコンパイラ104は、サイクル数が推定される推定されたカウントを基本ブロックnに格納する。
【0041】
基本ブロックがコンパイルされると、それらは高速ルックアップのためにキャッシュ102に格納される。例えば、どの基本ブロックがコンパイルされているかに応じてユーザ入力を受信した後に別のユーザ入力を受信し、同じ基本ブロックが、他のユーザ入力の処理に使用できるとき、基本ブロックは、キャッシュ102から迅速にアクセスすることができ、再生成される必要がない。
【0042】
さらに、キャッシュ102に格納された1つ以上の基本ブロックは、コンパイル後に無効としてマークされることができる。無効としてマークされた1つ以上の基本ブロックは、その後、基本ブロックの実行中に有効化されるか、または無効化される。1つ以上の基本ブロックが無効化されるとき、1つ以上の追加の基本ブロックがコンパイルされる。1つ以上の追加の基本ブロックのコンパイルは、本明細書では、1つ以上の基本ブロックの再コンパイルと呼ばれることがある。
【0043】
1つ以上の追加の基本ブロックの各々は、1つ以上の基本ブロック1~nの構造と同じ構造を有する。例えば、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、及び操作がある。別の例として、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、操作、及び追加の基本ブロックの操作の実行のサイクル数を有する。この例では、1つ以上の追加の基本ブロックのいくつかは、無効なマークを含む。さらに別の例として、1つ以上の追加の基本ブロックの各々は、ソースレジスタアドレス、宛先レジスタアドレス、操作、及び追加の基本ブロックの操作の実行のサイクル数を有する。コードの追加ブロックの各々は、基本ブロック1~nの各々と同じ方法で実行されることに留意されたい。
【0044】
ブロックディスパッチャ302は、ユーザ入力に基づいて、基本ブロック1~nのうちの1つ以上を実行または動作する。例えば、ブロックディスパッチャ302は、基本ブロック1及び2を実行して第1のユーザ入力を処理し、第2のユーザ入力に応じて基本ブロック3~7を実行する。一例として、ブロックディスパッチャ302は、デジタルクロック発振器またはクロックジェネレータなどのクロックソースを含み、これは、実際のカウントを生成するためのユーザ入力に基づいて、1つ以上の基本ブロック1~nを実行するために使用されるサイクル数をカウントする。ブロックディスパッチャ302は、実際のカウントをブロックコンパイラ104に送信して、推定されたカウントを実際のカウントで更新する。例えば、実際のカウントは、実際のカウントが計算される基本ブロックnに格納される。説明すると、実際のカウントは、基本ブロックnに割り当てられたキャッシュ102の1つ以上のメモリレジスタに格納される。
【0045】
一実施形態では、基本ブロックコンパイラ104は、任意の基本ブロックの実行のためのサイクル数を推定しない。この実施形態では、推定されたカウントの実際のカウントへの置き換えはない。むしろ、この実施形態では、実際のカウントは、ブロックコンパイラ104によって、実際にカウントが判定される基本ブロックnに格納される。
【0046】
図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は、レガシーマシンのメモリデバイスであることに留意されたい。
【0047】
一例として、ゲームコードgc1~gcNのうちどれも、更新されたマシンで実行されることができず、かつ、レガシーマシンで実行されることができない。説明すると、更新されたマシンのCPUまたはオペレーティングシステムは、ゲームコードgc1~gcNの実行をサポートできない。その一方で、レガシーマシンのCPUまたはオペレーティングシステムは、ゲームコードgc1~gcNの実行をサポートする。本明細書で使用されるコンピュータネットワークの例には、インターネットなどのワイドエリアネットワーク(WAN)、またはイントラネットなどのローカルエリアネットワーク(LAN)、またはそれらの組み合わせが含まれる。
【0048】
ゲームコンソール402は、更新されたマシンの一例である。ディスプレイデバイス410の例には、テレビ、スマートテレビ、及びコンピュータモニタが含まれる。説明すると、ディスプレイデバイス410は、液晶ディスプレイ(LCD)デバイス、または発光ダイオード(LED)ディスプレイデバイス、または有機発光ダイオード(OLED)ディスプレイデバイスである。
【0049】
システム400は、ユーザ1の片手または両手で保持されるハンドヘルドコントローラ(HHC)414をさらに含む。本明細書で使用されるハンドヘルドコントローラの例には、ボタンを備えたコントローラ、Sony(登録商標)CorporationのMove(登録商標)コントローラ、及銃型コントローラが含まれる。ハンドヘルドコントローラのボタンの例には、ジョイスティック、ディスプレイスクリーン410上で仮想オブジェクトを上、下、左、または右に移動するためのボタン、及びゲームタイトルGNを有するレガシーゲームNの様々な機能を選択するための他のボタンが含まれる。
【0050】
ゲームコンソール402は、メモリデバイス406、入力プロセッサシステム407、及びエミュレーションプロセッサシステム409を含む。一例として、本明細書で使用されるプロセッサシステムは、互いに結合された1つ以上のプロセッサを含む。エミュレーションプロセッサシステム409は、メモリデバイス406に結合され、入力プロセッサシステム407は、エミュレーションプロセッサシステム409に結合される。エミュレーションプロセッサシステム409は、基本ブロックコンパイラ104及びキャッシュ102を含む。基本ブロックコンパイラ104は、キャッシュ102に結合されている。
【0051】
ゲームコンソール402は、高精細メディアインターフェース(HDMI(登録商標))ケーブルなどの有線通信媒体または無線接続を介してディスプレイデバイス410に結合される。本明細書で使用される無線接続の例は、Wi-Fi(登録商標)接続またはBluetooth(登録商標)接続を含む。また、ハンドヘルドコントローラ414は、有線接続または無線接続を介してゲームコンソール402に結合されている。本明細書で使用される有線接続の例は、シリアル転送ケーブル、パラレル転送ケーブル、及びユニバーサルシリアルバス(USB)ケーブルを含む。
【0052】
クライアントデバイスの一例は、ハンドヘルドコントローラ、ゲームコンソール、及びディスプレイデバイスの組み合わせを含む。クライアントデバイスの別の例は、ハンドヘルドコントローラとディスプレイデバイスの組み合わせを含む。
【0053】
ユーザ1は、ユーザ識別(ID)及びパスワードがサーバシステム404によって認証されると、自身のユーザアカウント1にログインする。ユーザアカウント1には、サーバシステム1によってユーザID1が割り当てられる。ユーザ1がユーザアカウント1にログインすると、ユーザ1は、ゲームタイトルG1、ゲームタイトルGa、ゲームタイトルG2、そしてそのように続いてゲームタイトルGNまで、などの複数のゲームタイトルにアクセスすることができる。ゲームタイトルG1、G2、そしてそのように続くゲームタイトルGNまでは、レガシーゲームのタイトルの例である。ゲームタイトルGaは、レガシーゲームではないゲームのタイトルである。むしろ、ゲームタイトルGaは、レガシーマシンではプレイできないFortnite(登録商標)など、現在のゲームのものである。
【0054】
ユーザアカウント1にログインした後、ユーザ1は、レガシーゲームNをプレイするためのゲームタイトルGNを選択するために、ハンドヘルドコントローラ414上の1つ以上のボタンを選択する。ユーザ1がゲームタイトルGNを選択すると選択を示すユーザ入力418が、ハンドヘルドコントローラ414から、ゲームコンソール402及びコンピュータネットワーク408を介してサーバシステム404に送信される。一例として、ユーザ入力は入力信号である。ゲームタイトルGNの選択を示すユーザ入力418を受信すると、サーバシステム404は、ユーザ入力418に基づいてゲームコードgcNを識別する。例えば、サーバシステム404は、ゲームコードgcNがゲームタイトルGNと同じゲームタイトルを有し、その選択がユーザ入力418に示されていることを識別する。
【0055】
サーバシステム404は、コンピュータネットワーク408を介してゲームコードgcNをゲームコンソール402に送信する。ゲームコードgcNを受信すると、エミュレーションプロセッサシステム409は、ゲームコードgcNをゲームコンソール402のメモリデバイス406に格納する。
【0056】
ゲームコード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によって実行されて、1つ以上の画像フレーム422を生成する。説明すると、1つ以上の画像フレーム422は、位置P2にある戦闘機を有する仮想環境を表示するために、ディスプレイデバイス410上に表示される。このようにして、ゲームコードGCNの大部分または全体は、基本ブロックコンパイラ104によってコンパイルされ、実行のためにキャッシュ102に格納される。一例として、仮想シーンなどの仮想環境は、1つ以上の仮想現実(VR)画像または1つ以上の拡張現実(AR)画像を含む。
【0057】
一実施形態では、サーバシステム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と通信することを可能にする。
【0058】
一実施形態では、コンピュータネットワーク408に加えて、またはその代わりに、サーバシステム404とゲームコンソール402との間でデータを通信するためにセルラーネットワークが使用される。例えば、サーバシステム404とゲームコンソール402との間の通信は、無線技術を使用して促進される。無線技術は、例えば、4Gまたは5G無線通信技術を含む。本明細書で使用されるように、5Gはセルラーネットワーク技術の第5世代である。また、5Gネットワークは、デジタルセルラーネットワークであり、そこでは、プロバイダによって網羅されるサービスエリアが、セルと呼ばれる小さな地理的エリアに分割されている。5G無線通信技術では、サウンドと画像を表すアナログ信号が電話でデジタル化され、アナログ-デジタルコンバータによって変換され、ビットのストリームとして送信される。セル内のすべての5G無線デバイスは、他のセルで再利用される周波数のプールからトランシーバによって割り当てられた周波数チャネルを介して、セル内のローカルアンテナアレイ及び低電力自動トランシーバ(送信機及び受信機)の電波によって通信する。ローカルアンテナは、高帯域幅の光ファイバまたは無線バックホール接続によってセルラーネットワークで接続される。他のセルネットワークと同様に、1つのセルから別のセルに移動するモバイルデバイスは、新しいセルに自動的に転送される。5Gネットワークは、通信ネットワークの単なる一例示的タイプであり、本開示の実施形態は、5Gに続く後続世代の有線技術または無線技術と同様に、3Gまたは4Gなどの前世代の無線通信または有線通信を利用することができることを理解されたい。
【0059】
一実施形態では、ゲームコンソール402及びサーバシステム404のいずれかは、本明細書ではコンピューティングデバイスと称される。コンピューティングデバイスの他の例には、タブレット、スマートフォン、ラップトップコンピュータ、デスクトップコンピュータ、及びスマートテレビが含まれる。
【0060】
一実施形態では、ゲームコードgc1~gcNの各々は、サーバシステム404またはレガシーマシンの別個のメモリデバイスに格納されている。例えば、ゲームコードgc1は、第1のレガシーマシンのメモリデバイスに格納され、ゲームコードgc2は、第2のレガシーマシンのメモリデバイスに格納される。別の例として、ゲームコードgc1は、サーバシステム404の第1のメモリデバイスに格納され、ゲームコードgc2は、サーバシステム404の第2のメモリデバイスに格納される。
【0061】
一実施形態では、メモリデバイス412またはメモリデバイス406はキャッシュではない。むしろ、メモリデバイス412またはメモリデバイス406の各々は、RAMなどのメインメモリである。
【0062】
一実施形態では、メモリデバイス412は、メモリコントローラに結合されている。メモリコントローラは、メモリデバイス412からデータを読み取り、メモリデバイス412にデータを書き込む。メモリコントローラは、サーバシステム404のネットワークインターフェースコントローラに結合されている。メモリコントローラは、サーバシステム404のネットワークインターフェースコントローラから受信したデータを、格納のためにメモリデバイス412に送信する。メモリコントローラはまた、メモリデバイス412から受信したデータを、コンピュータネットワーク408を介してゲームコンソール402に送信するために、サーバシステム404のネットワークインターフェースコントローラにも送信する。
【0063】
図4Bは、システム450の実施形態の図であり、エミュレーションプロセッサシステム409及び入力プロセッサシステム407が、サーバシステム404内に配置され、1つ以上の画像フレーム422が、コンピュータネットワーク408を介してサーバシステム404から仮想環境または仮想シーンを表示するためのディスプレイデバイス410へ送信されることを示している。システム450は、サーバシステム404、ディスプレイデバイス410、及びハンドヘルドコントローラ414を含む。
【0064】
サーバシステム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を送信する。
【0065】
ユーザ入力419を受信すると、入力プロセッサシステム407は、ユーザ入力419をユーザ入力420に変換し、ユーザ入力420をエミュレーションプロセッサシステム409に提供する。ユーザ入力420を受信すると、エミュレーションプロセッサシステム409は、1つ以上の画像フレーム422の生成のために基本ブロック1~Nをコンパイルするために、ゲームコードgcNに関して
図4Aを参照して上述した同じ機能を実行する。サーバシステム404は、ディスプレイデバイス410のディスプレイ画面上に仮想環境452などの仮想環境を表示するために、コンピュータネットワーク408を介して、ディスプレイデバイス410に1つ以上の画像フレーム422を送信する。例えば、仮想環境452は、戦闘機の一例である仮想オブジェクト454を含む。この例では、仮想環境452は、仮想ピラミッド455及び仮想構造456などの1つ以上の仮想オブジェクトを含む仮想背景を含む。この例では、仮想オブジェクト454は、ゲームコードgcNを有するレガシーゲームNのプレイ中に、仮想ピラミッド455及び仮想構造456に向けて仮想ミサイルを発射することができる。
【0066】
一実施形態では、サーバシステム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に送信する。
【0067】
一実施形態では、コンピュータネットワーク408に加えて、またはその代わりに、サーバシステム404とディスプレイデバイス410との間でデータを通信するためにセルラーネットワークが使用される。例えば、サーバシステム404とディスプレイデバイスとの間の通信は、無線技術を使用して促進される。
【0068】
一実施形態では、ディスプレイデバイス410の代わりに、ヘッドマウントディスプレイ(HMD)が使用される。ヘッドマウントディスプレイは、ユーザ1の頭に装着され、LED画面、OLED画面、LCD画面などのディスプレイ画面を含む。HMDは、ディスプレイデバイス410によって実行されるものと同じ機能を実行する。
【0069】
図5Aは、基本ブロックの一実施形態を説明するための図である。各基本ブロックは、ソースレジスタアドレス、宛先レジスタアドレス、及び操作を含む。例えば、基本ブロック1は、ソースレジスタアドレス1、宛先レジスタアドレス1、及び操作1を含む。基本ブロック2は、ソースレジスタアドレス2、宛先レジスタアドレス2、及び操作2を含み、基本ブロックnは、ソースレジスタアドレスn、宛先レジスタアドレスn、及び操作nを含む。一例として、ソースレジスタアドレスは、キャッシュ102内の1つ以上のソースレジスタのアドレスであり、宛先レジスタアドレスは、キャッシュ102内の1つ以上の宛先レジスタのアドレスである。基本ブロックの操作の例には、ジャンプ操作、分岐操作、読み取り操作、書き込み操作、比較操作、リターン操作が含まれる。基本ブロックの操作のさらなる例には、加算操作、減算操作、乗算操作、及び除算操作などの算術操作が含まれる。
【0070】
一例として、操作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に移動するように指示する。
【0071】
さらに別の例として、本明細書で説明する仮想オブジェクトの一部分が、色を赤から緑に変更するもので、操作nが、仮想オブジェクトの色が赤から緑に更新される書き込み操作であるとき、宛先レジスタアドレスnで赤色を表すデータは、緑色を表すデータで上書きされ、基本ブロックnを実行する。この例では、基本ブロックnの実行は、仮想オブジェクトの一部分の色が赤から緑に変更されるものであることをエミュレーションプロセッサシステム409に示す。また、この例では、ユーザ入力420は、仮想オブジェクトの部分の色を赤から緑に変更するようにエミュレーションプロセッサシステム409に指示する。同様の方法で、強度及びテクスチャなどの他のパラメータが、ユーザ入力420に基づいて変更されることができる。
【0072】
各基本ブロックは、基本ブロック実行のサイクル数を含む。例えば、基本ブロック1は、基本ブロック1実行のサイクル数1を含む。別の例として、基本ブロック2は、基本ブロック2の実行のサイクル数2を含み、基本ブロックnは、基本ブロックnの実行のサイクル数nを含む。一例として、基本ブロック実行の推定サイクル数は、基本ブロックのコンパイル時に基本ブロックコンパイラ104(
図1)によって推定される。この例では、推定サイクル数は、基本ブロックに格納されている。また、この例では、基本ブロックがブロックディスパッチャ302によって実行された後(
図3)、ブロックディスパッチャ302は、上記の方法で推定実行サイクル数を実数で更新し、実数をブロックコンパイラ104に提供する。推定されたサイクル数は、ブロックコンパイラ104によって基本ブロックの実際のカウントに置き換えられる。別の例として、操作nの実行のサイクル数の実際のカウントは、ブロックディスパッチャ302によって生成され、基本ブロックnに格納される。この例では、操作nの実行のサイクル数の推定はない。
【0073】
さらに、別の例として、基本ブロック1~nのうちの1つ以上は、基本ブロック1~nのうちの1つ以上が有効性についてチェックされることを示す無効なマークを含む。例えば、基本ブロックnは、無効なマークnを含む。
【0074】
エミュレートされたPUコード106をゲームコードGCNの基本ブロック1~nに変換することにより、フックブロックなどのフックが、基本ブロック1~nの任意の2つの間に挿入され得ることに留意されたい。例えば、フックブロックnは、基本ブロック(n-1)とnの間に挿入されることができる。フックブロックnは、基本ブロックnの構造と同じ構造である。例えば、フックブロックには、ソースレジスタアドレス、宛先レジスタアドレス、操作、及びフックブロックの操作の実行サイクル数が含まれる。一例として、レガシーマシンに関連するセキュリティの問題のため、本明細書で説明されるフックは、レガシーマシンで実行するためにレガシーマシンに格納されたエミュレートされたPUコード106(
図1)の命令の間に挿入されることができない。
【0075】
さらに、基本ブロック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の場所を特定することができる。
【0076】
また、更新されたマシンのブロックディスパッチャ302が、基本ブロック1を実行した直後に基本ブロックnを実行することをユーザ入力が示す場合、ブロックディスパッチャ302は、キャッシュ102内の基本ブロック2~(n-1)の実行をスキップし、基本ブロック1から基本ブロックnにジャンプすることに留意されたい。この場合、基本ブロック1の実行は、ブロックディスパッチャ302が基本ブロックnにジャンプするときに、ブロックディスパッチャ302によって閉じられる。また、この場合、次の基本ブロックの開始アドレスは、前の基本ブロックの終了アドレスに連続している。例えば、開始アドレス2は終了アドレス1に連続し、開始アドレスnは基本ブロック(n-1)の終了アドレス(n-1)に連続している。
【0077】
一実施形態では、ソースレジスタアドレス1~nは、キャッシュ102のレジスタのメモリアドレスであり、かつ、宛先レジスタアドレス1~nは、キャッシュ102内のレジスタのメモリアドレスである。
【0078】
一実施形態では、基本ブロックは複数の操作を含む。例えば、基本ブロックnは、第1の操作、第1のソースレジスタアドレス、及び第1の宛先レジスタアドレスを含む。基本ブロックnは、第2の操作、第2のソースレジスタアドレス、及び第2の宛先レジスタアドレスをさらに含む。
【0079】
一実施形態では、基本ブロックは、操作、複数のソースアドレス、及び宛先アドレスを含む。
【0080】
一実施形態では、基本ブロックは、操作、複数の宛先アドレス、及びソースアドレスを含む。
【0081】
一実施形態では、基本ブロックは、複数の操作、複数のソースアドレス、及び複数の宛先アドレスを含む。
【0082】
一実施形態では、基本ブロックは、1つ以上の操作、1つ以上のソースアドレス、及び1つ以上の宛先アドレスを含む。
【0083】
一実施形態では、基本ブロックは、ソースレジスタアドレスまたは宛先レジスタアドレスのいずれかを含むが、両方は含まない。
【0084】
一実施形態では、ブロックコンパイラ102は、基本ブロックnの実行のためのサイクル数を推定しない。むしろ、ブロックディスパッチャ302は、基本ブロックnの実行のサイクル数の実際のカウントを生成し、実際のカウントを基本ブロックnに格納する。
【0085】
図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である。
【0086】
コンパイル操作を実行するために、基本ブロックコンパイラ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つの最上位位置にある。
【0087】
別の例として、基本ブロックコンパイラ104は、宛先アドレスMの4ビットを右にシフトして、キャッシュ102内の8つの宛先レジスタの4つのメモリアドレスを占有し、8つの宛先レジスタの残りの4つのメモリアドレスの任意のビットをマスクする。宛先アドレスmの4ビットによって占められる4つのメモリアドレスは、キャッシュ102内の8つの宛先レジスタの最下位位置にあり、ビットがマスクされる残りの4つのメモリアドレスは、キャッシュ102内の8つの宛先レジスタの最上位位置にある。
【0088】
同様に、別の例として、基本ブロックコンパイラ104は、操作Mの32ビットを右にシフトして、キャッシュ102内の64個の操作レジスタの32個のメモリアドレスを占有し、64個の操作レジスタの残りの32個のメモリアドレスの任意のビットをマスクする。操作Mの32ビットによって占有される32個のメモリアドレスは、キャッシュ102内の32個の操作レジスタの最下位位置にあり、ビットがマスクされる残りの32個のメモリアドレスは、キャッシュ102内の64個の操作レジスタの最上位位置にある。操作nは、キャッシュ102の操作レジスタに格納される。
【0089】
図6Aは、エミュレーションプロセッサシステム409の構成要素を説明するためのシステム600の実施形態の図である。システム600は、メモリデバイス412と、エミュレーションプロセッサシステム409と、を含む。エミュレーションプロセッサシステム409の基本ブロックコンパイラ104は、パーサまたはデコーダ602を含む。基本ブロックコンパイラ104は、ブロッククリエータ604、ブロックキャッシャ606A、及びブロックリーダ608をさらに含む。エミュレーションプロセッサシステム409は、ブロックディスパッチャ302を含む。
【0090】
一例として、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、ソフトウェア、ハードウェア、またはそれらの組み合わせを使用して実装される。例えば、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、PLDまたはASICまたはコントローラまたはプロセッサまたはコンピュータプログラムの一部分など、別個の集積回路である。別の例として、パーサ609、ブロッククリエータ604、ブロックキャッシャ606、ブロックリーダ608、及びブロックディスパッチャ302の各々は、別個のコンピュータソフトウェアプログラムである。
【0091】
ゲームコードgcNは、エミュレートされたPUコード命令1、エミュレートされたPUコード命令2というように、エミュレートされたPUコード命令Mまでの、複数の命令を含む。例えば、ゲームコードgcNの各命令は、一連のビットであり、レガシーマシンのプロセッサによって実行され得、仮想オブジェクトを位置P1から位置P2に移動すること、または、仮想オブジェクトの方向をO1からO2に変更すること、または、仮想オブジェクトの一部分のパラメータを改変すること、などの機能を実装する。
【0092】
パーサ602は、ブロックキャッシャ606及びブロックリーダ608に結合されているブロッククリエータ604に結合されている。ブロックキャッシャ606及びブロックリーダ608はキャッシュ102に結合されている。ブロックリーダ608は、ブロックディスパッチャ302に結合されている。
【0093】
図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)である。
【0094】
ブロッククリエータ604は、ユーザ入力が受信されていないと判定すると、ユーザ入力が操作652で受信されたかどうかを引き続きチェックする。例えば、基本ブロックコンパイラ104は、キャッシュ102(
図1)内に格納された基本ブロック(n+1)~pのいずれも実行せず、基本ブロックコンパイラ104(
図1)は、操作652でユーザ入力が受信されていないとき、エミュレートされたPUコード命令1~M(
図6A)のいずれも識別しない(ここでpは正の整数である)。操作652でユーザ入力を受信した時点では、基本ブロック1~nは生成されず、キャッシュ102内に格納されていないと想定されている。
【0095】
一方で、操作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を満たさないと判定する。
【0096】
別の説明として、ユーザ入力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を満たさないと判定する。
【0097】
基本ブロック(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つ以上を実行する。
【0098】
一方で、ブロック(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に提供する。
【0099】
説明すると、ユーザ入力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を満たさないと判定する。
【0100】
別の説明として、ユーザ入力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を満たさないと判定する。
【0101】
方法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に格納する。
【0102】
方法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をレンダリングなどして、表示する。操作652においてユーザ入力1が受信された後、ユーザ入力2などの別のユーザ入力が受信されると、方法600が繰り返される。
【0103】
図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に提供する。
【0104】
一方で、基本ブロック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を処理することができない。
【0105】
エミュレートされた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を実行する。
【0106】
同様に、基本ブロックコンパイラ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に提供する。
【0107】
一方で、基本ブロック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を処理することができない。
【0108】
エミュレートされた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を実行する。
【0109】
図7Aは、メモリデバイス412からのエミュレートされたPUコード106の削除を説明するためのシステム700の実施形態の図である。システム700は、ブロッククリエータ604、命令リムーバ702、及びメモリデバイス412を含む。命令リムーバ702の例には、プロセッサ、ASIC、PLD、コンピュータプログラム、コンピュータプログラムの一部分、及びマイクロコントローラが含まれる。命令リムーバ702は、ブロッククリエータ604に結合され、かつメモリデバイス412に結合されている。
【0110】
図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のすべてがコンパイルされているかどうかを判定する。
【0111】
ゲームコードgcNのエミュレートされたPUコード命令1~Mのすべてがコンパイルされていると判定すると、ブロッククリエータ604は、ゲームコードgcNをメモリデバイス412から削除するコマンドを命令リムーバ702(
図7A)に送信する。コマンドを受信すると、方法720の操作724において、命令リムーバ702は、メモリデバイス412からエミュレートされたPUコード命令1~Mを消去する。
【0112】
一方で、ゲームコードgcNのエミュレートされたPUコード命令1~Mのうちの1つ以上がテーブルに基づいてコンパイルされていないと判定すると、方法720の操作726において、ブロッククリエータ604は、命令リムーバ702へコマンドを送信せず、メモリデバイス412からゲームコードgcNを削除する。ゲームコードgcNを削除するコマンドを受信するまで、命令リムーバ702は、メモリデバイス412からエミュレートされたPUコード命令1~Mを削除しない。
【0113】
一実施形態では、ブロッククリエータ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から削除されない。
【0114】
図8Aは、基本ブロックの検証を説明するためのエミュレーションプロセッサシステム800の実施形態の図である。エミュレーションプロセッサシステム800は、エミュレーションプロセッサシステム409の一例である(
図4B)。エミュレーションプロセッサシステム800は、基本ブロックコンパイラ104、キャッシュ102、ブロックバリデータ802、及びブロックフラッガ804を含む。ブロックバリデータ802は、ブロッククリエータ604、ブロックディスパッチャ302、パーサ602、及びブロックフラッガ804に結合されている。クロックバリデータ802及びブロックフラガー804のそれぞれは、キャッシュ102に結合されている。
【0115】
一例として、ブロックバリデータ802は、ASIC、またはPLD、またはマイクロコントローラ、またはプロセッサ、またはコンピュータプログラム、またはコンピュータプログラムの一部分として実装される。また、一例として、ブロックフラガー804は、ASIC、またはPLD、またはマイクロコントローラ、またはプロセッサ、またはコンピュータプログラム、またはコンピュータプログラムの一部分として実装される。
【0116】
一実施形態では、ASIC、PLD、マイクロコントローラ、マイクロプロセッサ、コントローラ、及びプロセッサという用語は、本明細書では互換的に使用されている。
【0117】
図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に格納されているかどうかを判定する。
【0118】
基本ブロック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に提供する。
【0119】
この例で続けると、エミュレートされたPUコード命令1~Mのうちの1つ以上をパーサ602から受信すると、ブロックバリデータ802は、エミュレートされたPUコード命令1~Mのうちの1つ以上から第1のハッシュ値を生成し、キャッシュ102内に第1のハッシュ値を格納する。説明すると、ブロックバリデータ802は、基本ブロックnに対応するエミュレートされたPUコード命令1~Mのうちの1つ以上からダイジェストまたはチェックサムを生成する。この例では、第1のハッシュ値は、基本ブロックnを含むようにキー設定された、キャッシュ102の1つ以上のレジスタに格納される。
【0120】
方法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つ以上のメモリアドレスが上書きされているかどうかを判定する。
【0121】
パーサ602から要求を受信すると、レガシーマシンのプロセッサは、要求に対する応答を提供し、応答は、1つ以上のメモリアドレスが、エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内で上書きされているかどうかを示す。エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内の1つ以上のメモリアドレスが上書きされていないという応答を受信すると、ブロックバリデータ802は、コマンドをブロックフラッガ804(
図8A)に送信し、基本ブロックnを無効としてマークしないようにする。コマンドを受信すると、方法800の操作858において、ブロックフラッガ804は、基本ブロックnを無効としてマークしない。
【0122】
一方で、エミュレートされたPUコード命令1~Mのうちの1つ以上が格納されているメモリデバイス412内の1つ以上のメモリアドレスが、上書きされているという応答を受信すると、方法850の操作860において、ブロックバリデータ802は、コマンドをブロックフラッガ804(
図8A)に送信し、基本ブロックnを無効としてマークする。基本ブロックnを無効としてマークするコマンドを受信すると、ブロックフラッガ804は、基本ブロックnを無効としてマークする。例えば、ブロックフラッガ804は、キャッシュ102内の基本ブロックnにアクセスし、基本ブロックnを有するキャッシュ102内のメモリアドレス内に、基本ブロックnが無効であることを示すために無効マークn(
図5A)などの識別子を含む。無効なマークnの一例は、ビットのシーケンスである。
【0123】
一実施形態では、ハッシュ値は検証結果の一例である。
【0124】
図8Cは、
図8Bの方法800のフローチャートの続きである。方法800の操作862において、ブロックバリデータ802(
図8A)は、基本ブロックnが実行されるべきかどうかを判定する。例えば、ブロックディスパッチャ302は、基本ブロックnが実行されるべきであるという指示をブロックバリデータ802に送信する。基本ブロックnが実行されるべきであるという指示をブロックディスパッチャ302から受信すると、ブロックバリデータ802は、基本ブロックnが実行されるべきであると判定する。指示が受け取られるまで、ブロックバリデータ802は、基本ブロックnが検証されるべきであると判定しない。
【0125】
基本ブロック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が無効としてマークされていないと判定する。
【0126】
基本ブロックnが無効としてマークされていないと判定すると、方法800の操作866において、基本ブロックnが実行される。例えば、操作866は操作662(
図6B)に類似している。説明すると、ブロックバリデータ802は、基本ブロックnを実行するためにブロックディスパッチャ302にコマンドを送信する。基本ブロックnを実行するコマンドを受信すると、ブロックディスパッチャ302は基本ブロックnを実行する。この説明では、基本ブロックnを実行するためのコマンドがブロックバリデータ802から受信されるまで、ブロックディスパッチャ302は基本ブロックnを実行しない。
【0127】
一方で、基本ブロック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のハッシュ値が生成されたときに発生する。
【0128】
基本ブロック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を実行しない。
【0129】
一方で、基本ブロック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をコンパイルするのと同じ方法で追加の基本ブロックをコンパイルする。
【0130】
追加の基本ブロックは、実行のためにブロッククリエータ604からブロックディスパッチャ302に送信される。例えば、ブロックディスパッチャ302は、追加の基本ブロックを実行して、仮想環境452(
図4B)などの追加の仮想環境の一部分を生成する。説明すると、ブロックディスパッチャ302は、追加の基本ブロックを実行して、画像フレームの一部を生成し、この画像フレームは、仮想オブジェクト454の位置及び方向、仮想オブジェクト454のパラメータ、仮想環境452内の他の仮想オブジェクトの位置及び方向、及び追加の仮想環境内の他の仮想オブジェクトのパラメータなどの追加の仮想環境データを含む。ブロックディスパッチャ302は、画像フレームをエミュレーションプロセッサシステム409のGPUに提供して、ディスプレイデバイス410のディスプレイ画面上に追加の仮想環境をレンダリングするなどして表示する。
【0131】
方法850は、基本ブロックn及び追加の基本ブロックを参照して示されているが、方法850は、追加の基本ブロックが生成されるのと同じ方法で生成される他の基本ブロック1~(n-1)及びより多くの追加の基本ブロックに等しく適用可能であることに留意されたい。
【0132】
一実施形態では、エミュレートされたPUコード命令1~Mのセットは、レガシーマシンの外部に配置された1つ以上のメモリデバイスの第1のセットに格納され、エミュレートされたPUコード命令の追加のセットは、追加のレガシーマシンの外部に配置された1つ以上のメモリデバイスの第2のセットに格納されている。
【0133】
図9Aは、レガシーマシン900の実施形態を説明するための図である。レガシーマシン900は、レガシーCPU902、レガシーGPU904、メモリデバイス906、及びCD-ROMドライブ908を含む。メモリデバイス906は、メモリデバイス412(
図4A)の一例である。レガシーCPU902の一例は、1クロックサイクル中に最大32ビットを処理することができる32ビットCPUである。また、レガシーGPU904の一例は、1クロックサイクル中に最大32ビットを処理できる32ビットGPUである。メモリデバイス906の一例は、2メガバイト(MB)RAMである。
【0134】
レガシーCPU902及びレガシーGPU904は、CD-ROMドライブ908に結合されているメモリデバイス906に結合されている。エミュレートされたPUコード106は、メモリデバイス906内に格納されている。
【0135】
レガシーCPU902またはレガシーGPU904は、メモリデバイス906からエミュレートされたPUコード106にアクセスし、エミュレートされたPUコード106を処理する。CD-ROMドライブ908は、更新された命令または破損したコードを含むCD-ROMを受け入れる。更新された命令または破損したコードは、レガシーCPU902によってCD-ROMからメモリデバイス906に転送され得る。
【0136】
一実施形態では、レガシーマシン900はキャッシュを含まない。一実施形態では、レガシーマシン900は、4キロバイト(KB)のキャッシュなどの限られた容量のキャッシュを含む。
【0137】
一実施形態では、レガシーマシン900は、現在、会社または企業などのエンティティによって製造されていないが、過去にエンティティによって製造された。
【0138】
図9Bは、更新されたマシン920の実施形態を説明するための図である。更新されたマシン920は、CPU922、GPU924、メモリシステム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ビットを処理できる。
【0139】
CPU922及びGPU924は、メモリシステム906に結合されている。一例として、エミュレートされたPUコード106は、レガシーメモリシステム906内に格納されている。メモリシステム926が含むものの一例は、500ギガバイト(GB)または2テラバイト(TB)のストレージを提供するハードドライブである。CPU922、GPU924、キャッシュ928、及びメモリシステム926は、バス930を介して互いに結合されている。
【0140】
CPU922またはGPU924は、メモリシステム926にアクセスする前に、最初にキャッシュ928にアクセスする。キャッシュ928が、CPU922またはGPU924によって要求されたデータを含まないと判定すると、CPU922またはGPU924は、メモリシステム926にアクセスする。
【0141】
一実施形態では、ゲームコードgcNは、CPU922またはGPU924によって実行されることはできないが、レガシーCPU902またはレガシーGPU904によって実行されることができることに留意されたい。また、基本ブロック1~nは、CPU922またはGPU924によって実行され得るが、レガシーCPU902またはレガシーGPU904によっては実行され得ない。
【0142】
一実施形態では、キャッシュ928は、CPU922内に位置する。
【0143】
一実施形態では、キャッシュ928は、GPU924内に位置する。
【0144】
一実施形態では、キャッシュ928は、CPU922内に位置し、キャッシュ102などの別のキャッシュは、GPU924内に位置する。
【0145】
一実施形態では、更新されたマシン920は、現在、エンティティによって製造されているか、またはエンティティによって最近製造された。例えば、更新されたマシン920は、レガシーマシン900の製造の数年後にエンティティによって製造されている。
【0146】
図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を処理する。
【0147】
仮想オブジェクト454がレガシーゲームNのレベル3で位置P1と方向O1で開始されることを示す信号などのユーザ入力3が受信されると、ブロックコンパイラ104は、基本ブロック1及び2をユーザ入力3の処理として識別する。そのように識別すると、ブロッククリエータ604は、基本ブロック1及び2を、基本ブロック1または基本ブロック2などの単一の基本ブロックに組み合わせるなどして統合する。この統合は、キャッシュ102内のメモリスペースを節約し、かつ、基本ブロック1及び基本ブロック2にアクセスする代わりに、単一の基本ブロックにアクセスする際の効率も高める。
【0148】
ブロッククリエータ604はさらに、キャッシュ102のポインタに値を生成する。本明細書で使用されるポインタの例は、レジスタである。ポインタは、基本ブロック1または基本ブロック2を処理するためのユーザ入力が受信されたときに、単一の基本ブロックを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が基本ブロック1または2を実行するとき、ブロックディスパッチャ302は、ポインタにアクセスし、基本ブロック1または2の代わりに単一の基本ブロックを実行する。
【0149】
図10Bは、基本ブロック1~nのうちの1つ以上の修正を説明するためのシステム1020の実施形態の図である。システム1020は、ブロックインターフェース1022、キャッシュ102、及びブロックディスパッチャ302を含む。一例として、基本ブロックnは、推測航法の操作nが含まれる。別の例として、基本ブロックnは、ディスプレイデバイス410(
図4B)のディスプレイ画面の端から十字線を跳ね返す操作nを含む。ブロックインターフェース1022の例は、ASIC、またはPLD、またはマイクロプロセッサ、またはマイクロコントローラ、またはコンピュータプログラム、またはコンピュータプログラムの一部分である。ブロックインターフェース1022は、キャッシュ102に結合されている。
【0150】
ブロックインターフェース1022は、キャッシュ102に格納された1つ以上の基本ブロック1~nへのアクセスをユーザに提供する。例えば、ユーザは、キーボード、マウス、またはキーパッドなどの入力デバイス上の1つ以上のボタンを選択して、修正入力1024を生成する。一例として、修正入力1024は、基本ブロックnを修正するためのソースコードの形式の1つ以上のユーザ命令を含む。説明すると、修正入力1024は、基本ブロックnから推測航法の操作nを除去するためのユーザ命令を含む。別の例として、修正入力1024は、十字線がディスプレイデバイス410のディスプレイ画面の端から滑り落ち、ディスプレイデバイス410のディスプレイ画面の反対側の端に表示されることを含むように操作nを変更する命令を含む。反対側のエッジは、十字線が滑り落ちる端と対角線上にある。
【0151】
入力デバイスは、ブロックインターフェース1022に結合されている。修正入力1024は、入力デバイスからブロックインターフェース1022に送信されて、基本ブロックnを修正して、修正された基本ブロックnを出力する。一例として、修正された基本ブロックnは、推測航法の操作を含んでいない。別の例として、修正された基本ブロックnは、十字線を端から反対側の端にスライドさせる操作nを含む。さらに別の例として、修正された基本ブロックnは、操作nの実行のクロックサイクル数を計算し、その数を基本ブロックnに格納する操作を含む。説明すると、サイクル数は、基本ブロック1が格納されているキャッシュ102のメモリアドレスに格納されている。クロックサイクル数を計算する操作は、操作nを実行することに加えて、ブロックディスパッチャ302(
図3)によって実行される。ブロックディスパッチャ302は、操作nの実行時にクロックサイクル数を計算し、その数を基本ブロックnに格納する。
【0152】
ブロッククリエータ604はさらに、キャッシュ102内のポインタに値を生成し、ポインタは、基本ブロックnを処理するためのユーザ入力が受信されたときに、変更された基本ブロックnを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が基本ブロックnを実行するとき、ブロックディスパッチャ302はポインタにアクセスし、基本ブロックnの代わりに変更された基本ブロックnを実行する。
【0153】
図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を含む。
【0154】
仮想オブジェクト454の破壊になる、仮想オブジェクト454(
図4B)の位置及び/または方向の変化を示す信号などのユーザ入力2が受信されるとき、ブロックコンパイラ104は、ユーザ入力2を処理するものとして基本ブロック1及び2を識別する。そのように識別すると、ブロッククリエータ604は、基本ブロック1及び2を、基本ブロック1または基本ブロック2などの単一の基本ブロックに組み合わせるなどして統合する。例えば、ユーザ入力2を受信すると、仮想オブジェクト454の破壊及び仮想オブジェクト454の再生成がトリガーされる。基本ブロック1と2を組み合わせると、サブルーチン1はスキップされる。
【0155】
ブロッククリエータ604はさらに値を生成し、その値をキャッシュ102内のポインタに格納する。この値は、基本ブロック1及び2を処理するためのユーザ入力が受信されたときに、単一の基本ブロックを実行するようにブロックディスパッチャ302に示す。ブロックディスパッチャ302が、基本ブロック1及び2を実行するためであるときに、ブロックディスパッチャ302は、ポインタにアクセスし、基本ブロック1の代わりに単一の基本ブロックを実行する。
【0156】
図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の例には、ジャンプ、格納、ロード、分岐、及び算術操作が含まれる。
【0157】
修正入力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がミサイルの代わりにレーザ銃を発射するレベルである。
【0158】
さらに、ブロックインターフェース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を実行する。
【0159】
図10Eは、基本ブロックの実行の順序での切り替えを示すシステム1050の実施形態の図である。システム1050は、キャッシュ102及びブロックインターフェース1022を含む。キャッシュ102は、キャッシュ102のポインタ内に値を含み、その値は、基本ブロック1の実行後に基本ブロック2が実行されることを示している。ユーザは、入力デバイスを使用して、基本ブロック1及び2の実行順序が切り替えられることを示す信号を含む修正入力1052を提供する。信号を受信すると、ブロックインターフェース1022は、キャッシュ102内のポインタの値を変更して、基本ブロック2を実行した後に基本ブロック1が実行されることを示す。
【0160】
図11Aは、基本ブロックnに格納されたサイクル数の実際のカウントの使用を説明するための方法1100の実施形態のフローチャートである。方法1100は、基本ブロックnを実行する操作662を含む。方法1100の操作1102において、ブロックディスパッチャ302(
図3)は、操作662において、基本ブロックnの実行のサイクル数をカウントして、第1のカウントを生成する。ブロックディスパッチャ302は、方法1100の操作1104において、基本ブロックnに第1のカウントを格納する。例えば、ブロックディスパッチャ302は、基本ブロックnに割り当てられた、キャッシュ102内のレジスタアドレスのうちの1つを有するレジスタに実数を書き込む。
【0161】
方法1100の操作1106において、ブロッククリエータ604(
図6A)は、同じ基本ブロックnが再度実行されるかどうかを判定する。例えば、ブロッククリエータ604は、同じ基本ブロックnを処理するためのユーザ入力が、クライアントデバイスから受信されるかどうかを判定する。ブロッククリエータ604は、ユーザ入力が受信されるまで、同じ基本ブロックnを処理するためのユーザ入力が受信されるかどうかを判定し続ける。
【0162】
図11Bは、
図11Aの方法1100のフローチャートの続きである。基本ブロックnを処理するためのユーザ入力が再び受信されたと判定すると、基本ブロックnは、ブロックディスパッチャ304によって再び実行される。方法1100の操作1108では、ブロックディスパッチャ304は、操作1106において、基本ブロックnの実行のサイクル数をカウントして、第2のカウントを計算する。
【0163】
ブロックディスパッチャ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は通知をトリガーしない。
【0164】
図12は、第1のクライアントデバイスから第2のクライアントデバイスへの基本ブロック1~nの転送を説明するためのシステム1200の実施形態の図である。システム1200は、ゲームコンソール402、コンピュータネットワーク408、サーバシステム404、ゲームコンソール1202、及びディスプレイデバイス1204を含む。ゲームコンソール1202は、ゲームコンソール402に類似している。例えば、ゲームコンソール402及び1202の両方は、更新されたマシンの例である。別の例として、ゲームコンソール1202はレガシーマシンではない。また、ディスプレイデバイス1204は、
図4Aのディスプレイデバイス410に類似している。例えば、ディスプレイデバイス410は、HMDまたはテレビまたはスマートテレビまたはコンピュータモニタである。
【0165】
ゲームコンソール402は、ネットワークインターフェースコントローラ1212を含む。ゲームコンソール1202は、エミュレーションプロセッサシステム1206、入力プロセッサシステム1207、キャッシュ1208、及びネットワークインターフェースコントローラ1210を含む。エミュレーションプロセッサシステム1206は、エミュレーションプロセッサシステム409と同じ構造及び同じ機能を有する。入力プロセッサシステム1207は、入力プロセッサシステム407(
図4A)と同じ構造及び同じ機能を有する。また、キャッシュ1208は、キャッシュ102と同じ構造及び同じ機能を有する。エミュレーションプロセッサシステム1206、入力プロセッサシステム1207、キャッシュ1208、及びネットワークインターフェースコントローラ1210は、バス1218を介して互いに結合されている。
【0166】
基本ブロック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つ以上のメモリデバイス内に格納する。
【0167】
ユーザ2は、ハンドヘルドコントローラ1212を使用して、ハンドヘルドコントローラ1212上の1つ以上のボタンを選択して、サーバシステム404によってユーザ2に割り当てられたユーザアカウント2にログインする。ユーザ2は、ユーザID2及びパスワードがサーバシステム404によって認証されると、ユーザアカウント2にログインする。ユーザ2がユーザアカウント2にログインすると、ユーザ2は、ゲームタイトルG1、ゲームタイトルGa、ゲームタイトルG2、そしてそのように続いてゲームタイトルGNまで、などの複数のゲームタイトルにアクセスすることができる。
【0168】
ユーザアカウント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を送信する。
【0169】
要求1220を受信すると、ネットワークインターフェースコントローラ1210は、ネットワーク通信プロトコルを要求1220に適用することによって要求1220を埋め込む1つ以上のパケットを生成し、コンピュータネットワーク408を介してサーバシステム404に1つ以上のパケットを送信する。サーバシステム404のネットワークインターフェースコントローラは、1つ以上のパケットを受信し、ネットワーク通信プロトコルを適用して、1つ以上のパケットから要求1220を抽出する。サーバシステム404のプロセッサは、要求1220を分析して、基本ブロック1~nが要求されていることを識別する。
【0170】
基本ブロック1~nが要求されたとの判定に応じて、サーバシステム404は、サーバシステム404の1つ以上のメモリデバイスに格納された基本ブロック1~nにアクセスして、基本ブロック1~nをサーバシステム404のネットワークインターフェースコントローラに提供する。サーバシステム404のネットワークインターフェースコントローラは、ネットワーク通信プロトコルを適用して、基本ブロック1~nを埋め込む1つ以上のパケットを生成して、コンピュータネットワーク408を介して1つ以上のパケットをゲームコンソール1202に送信する。
【0171】
ゲームコンソール1202のネットワークインターフェースコントローラ1210は、基本ブロック1~nを有する1つ以上のパケットを受信し、ネットワーク通信プロトコルを適用して、1つ以上のパケットから基本ブロック1~nを抽出し、基本ブロック1~nをエミュレーションプロセッサシステム1206に送信する。エミュレーションプロセッサシステム1206の基本ブロックコンパイラは、基本ブロック1~nをキャッシュ1208に格納する。
【0172】
ゲームタイトル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からアクセスされることができる。
【0173】
図13は、レガシーゲームNのプレイ中にハンドヘルドコントローラ414から受信されたユーザ入力419のエミュレーションを説明するためのシステム1300の実施形態の図である。システム1300は、入力プロセッサシステム407、エミュレーションプロセッサシステム409、ハンドヘルドコントローラ414、及びハンドヘルドコントローラ1306を含む。
【0174】
ハンドヘルドコントローラ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)チップ内に一体化されたプロセッサである。
【0175】
入力プロセッサシステム407は、入力エミュレータ1318、メモリデバイス1316、及び通信デバイス1320をさらに含む。メモリデバイス1316内には、デフォルトのマッピング1308が格納されている。デフォルトのマッピング1308は、ユーザアカウント1及び2に関連付けられていることに留意されたい。例えば、レガシーゲームNがユーザアカウント1を介してアクセスされるとき、メモリデバイス1316に格納され、ユーザアカウント1で使用するために選択された現在のマッピングがない限り、デフォルトのマッピング1308が入力エミュレータ1318によって適用される。
【0176】
一例として、本明細書で説明する入力エミュレータは、ハードウェアもしくはソフトウェア、またはそれらの組み合わせである。説明すると、入力エミュレータは、プロセッサ、またはPLD、またはASIC、またはコントローラである。さらに説明するために、入力エミュレータ1318は、更新されたマシン920内に実装されると、更新されたマシン920が、ハンドヘルドコントローラ414から受信したユーザ入力を受信して処理し、レガシーゲームNのプレイを容易にすることを可能にする。入力エミュレータ1318は、レガシーゲームNをプレイするためのハンドヘルドコントローラ414の使用を容易にする。通信デバイス1320の一例は、無線転送プロトコルまたは有線転送プロトコルなどの近距離通信プロトコルを適用する通信回路である。有線転送プロトコルの一例は、USBプロトコルであり、無線転送プロトコルの一例はBluetooth(登録商標)プロトコルである。通信デバイス1320は、入力エミュレータ1318に結合されている入力プロセッサ1314に結合されている。入力エミュレータ1318は、基本ブロックコンパイラ104に結合されている。入力プロセッサ1314と入力エミュレータ1318の両方は、メモリデバイス1316に結合されている。
【0177】
また、ハンドヘルドコントローラ414は、有線接続または無線接続などの接続を介して入力プロセッサ1314に結合されている。有線接続の一例には、並列転送接続が含まれ、そこでは、情報は、ハンドヘルドコントローラ414から入力プロセッサ1314への同時並列方式での通信である。
【0178】
ユーザ1は、ハンドヘルドコントローラ414上で1つ以上の入力デバイスを操作して、ゲームタイトルGNを選択し、ユーザ入力418を生成する(
図4A)。ハンドヘルドコントローラ414の入力デバイスの例には、左サムスティック1302A、右サムスティック1302B、及び1つ以上のボタンが含まれる。説明すると、ゲームタイトルGNを選択するために、ハンドヘルドコントローラ414上のボタンが、押される、または押し下げられるなど、ユーザ1によって選択される。ユーザ入力418に基づいて、サーバシステム404は、ゲームコンソール402のメモリデバイス406(
図4A)での格納のために、コンピュータネットワーク408を介してゲームコンソール402にゲームコードgcNを送信する。
【0179】
レガシーゲームNのプレイ中、ハンドヘルドコントローラ414の1つ以上の入力デバイスは、ユーザ1によって操作され、対応する1つ以上の電気信号を生成し、これが最終的にユーザ入力419を形成する。例えば、ユーザ1が、ハンドヘルドコントローラ414のサムスティックを前方向または後方向または右方向または左方向に動かすと、電気信号が生成される。説明すると、順方向及び逆方向は、ハンドヘルドコントローラ414のxyz座標系のy軸に沿っており、右方向及び左方向は、xyz座標系のx軸に沿っている。この説明では、順方向は逆方向に反対であり、右方向は左方向に反対である。
【0180】
ハンドヘルドコントローラ414は、ハンドヘルドコントローラ414の1つ以上の入力デバイスに結合された、1つ以上の磁力計、1つ以上の加速度計、1つ以上のポテンショメータ、及び1つ以上のジャイロスコープなどのモーションセンシティブハードウェアを含む。ハンドヘルドコントローラ414は、モーションセンシティブハードウェアに結合されたアナログ-デジタル変換器をさらに含む。ハンドヘルドコントローラ414は、アナログ-デジタル変換器に結合されたエンコーダなどのプロセッサと、プロセッサに結合された通信デバイスと、を含む。ハンドヘルドコントローラ414の1つ以上の入力デバイスがユーザ1によって操作されるとき、1つ以上のアナログモーションセンシティブ信号などの対応する電気信号は、モーションセンシティブハードウェアによって生成される。1つ以上のアナログモーションセンシティブ信号は、モーションセンシティブハードウェアからハンドヘルドコントローラ414のアナログ-デジタル変換器に送信される。ハンドヘルドコントローラ414のアナログ-デジタル変換器は、アナログモーションセンシティブ信号をアナログ形式からデジタル形式に変換して、デジタルモーションセンシティブ信号を出力する。デジタルモーションセンシティブ信号は、アナログ-デジタル変換器からハンドヘルドコントローラ414のプロセッサに送信される。
【0181】
ハンドヘルドコントローラ414のプロセッサは、符号化プロトコルを適用して、デジタルモーションセンシティブ信号を符号化して、符号化された信号を出力する。例えば、第1のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414上のオプションボタンの選択を表すと判定すると、ハンドヘルドコントローラ414のプロセッサは、第1の周波数を使用して第1のデジタルモーションセンシティブ信号を符号化する。この例では、第2のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表すと判定することに応じて、ハンドヘルドコントローラ414のプロセッサは、第2のデジタルモーションセンシティブ信号を第1の周波数より大きい、またはより小さいなど、第1の周波数とは異なる第2の周波数を使用して第2のデジタルモーションセンシティブ信号を符号化する。また、この例では、第3のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表すと判定したことに応じて、ハンドヘルドコントローラ414のプロセッサは、第1及び第2の周波数とは異なる第3の周波数を使用して第3のデジタルモーションセンシティブ信号を符号化する。
【0182】
ハンドヘルドコントローラ414のプロセッサは、符号化された信号をハンドヘルドコントローラ414の通信デバイスに送信する。ハンドヘルドコントローラ414の通信デバイスは、Bluetooth(商標)プロトコルなどの無線転送プロトコルを符号化された信号に適用して、ユーザ入力419の例である1つ以上のデータパケットを生成する。ハンドヘルドコントローラ414の通信デバイスは、無線接続を介して入力プロセッサシステム407の通信デバイス1320にユーザ入力419を送信する。
【0183】
ユーザ入力419を受信すると、通信デバイス1320は、無線転送プロトコルを適用して、1つ以上のデータパケットから符号化された信号を抽出し、符号化された信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、符号化された信号を、復号化及び分析するなどして解析し、ハンドヘルドコントローラ414の操作に関連付けられた初期入力デバイス情報を判定する。例えば、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号に基づいて、ハンドヘルドコントローラ414の入力デバイスのどれが、ユーザ1によって操作されているか、入力デバイスの動きの量、及び動きの量の方向を識別する。説明すると、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計から受信した1つ以上のアナログモーションセンシティブ信号に基づいて生成された1つ以上のデジタルモーションセンシティブ信号から、ハンドヘルドコントローラ414上の特定のボタン(オプションボタンなど)がユーザ1によって選択されているかを判定する。さらに説明するために、第1のデジタルモーションセンシティブ信号が、第1の周波数を使用して符号化されていると判定すると、入力プロセッサ1314は、オプションボタンが選択されていると判定し、第2のデジタルモーションセンシティブ信号が、第2の周波数を使用して符号化されていると判定することに応じて、入力プロセッサ1314は、左サムスティック1302Aがユーザ1によって操作されていると判定する。
【0184】
別の説明として、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計、ジャイロスコープ、及び磁力計から受信した1つ以上のアナログモーションセンシティブ信号に基づいて生成された1つ以上のデジタルモーションセンシティブ信号から、サムスティックが、前方、後方、右方、左方などの特定の方向に動かされたか、そして移動量が特定の方向で事前判定された閾値を超えているかを判定する。この説明では、特定の方向での動き、及び動きの量が、サムスティックの機能の例である。さらに説明するために、入力プロセッサ1314は、左サムスティック1302Aの移動量が所定の移動量を超えると判定して、移動量が所定の閾値を超えると判定する。所定の移動量は、メモリデバイス1316に記憶される。ハンドヘルドコントローラ414のボタンの機能の別の例は、ユーザ1によるボタンの選択(押す、または押し込むなど)である。この例では、ボタンの機能は、ボタンが、入力プロセッサ1314によってユーザ1によって操作されていると識別されたときに判定される。ハンドヘルドコントローラ414のボタンの機能の別の例として、入力プロセッサ1314は、ユーザ1がボタンを操作したときにデジタルモーションセンシティブ信号が生成される回数を判定する。この例では、回数は、デジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414から入力プロセッサ1314によって受信されると判定された回数に等しい。また、この例では、回数は、ボタンがユーザ1によって選択された回数と同じである。
【0185】
入力プロセッサ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の対応を含む。
【0186】
更新された入力デバイス識別子1312の例は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を識別する英数字及び記号またはビットなどの識別文字を含む。説明すると、更新された入力デバイス識別子1312は、左サムスティック1302Aの記号及び右サムスティック1302Bの記号を含む。別の例として、更新された入力デバイス識別子1312は、ハンドヘルドコントローラ414上のタッチパッド用の記号を含む。
【0187】
レガシー入力デバイス識別子1310の例は、ハンドヘルドコントローラ1306のレガシー入力デバイスの1つ以上を識別する英数字及び記号またはビットなどの識別文字を含む。説明すると、更新された入力デバイス識別子1310には、ハンドヘルドコントローラ1306の左移動ボタン1304Aの記号、ハンドヘルドコントローラ1306の前方移動ボタン1304Bの記号、ハンドヘルドコントローラ1306の右移動ボタン1304Cの記号、及びハンドヘルドコントローラ1306の後方移動ボタン1304Dの記号が含まれる。別の説明として、レガシー入力デバイス識別子1310は、ハンドヘルドコントローラ1306の選択ボタンの記号を含む。
【0188】
さらに、入力エミュレータ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つの向きから別の向きへの動き、またはそれらの組み合わせである。
【0189】
入力エミュレータ1318は、ユーザ1によって操作される1つ以上の更新された入力デバイス識別子1312に対応する1つ以上のレガシー入力デバイス識別子1310を有するユーザ入力420を生成する。また、ユーザ入力420は、1つ以上のレガシー入力デバイス識別子1310によって識別される1つ以上のレガシー入力デバイスの1つ以上の機能を含む。入力エミュレータ1318は、ユーザ入力420を基本ブロックコンパイラ104に送信する。
【0190】
基本ブロックコンパイラ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への移動を可能にするかどうかをさらに判定する。
【0191】
ユーザ入力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つ以上が実行される。
【0192】
一方で、ユーザ入力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によって実行される。
【0193】
一実施形態では、ハンドヘルドコントローラ414は、レガシーマシン900(
図9A)と互換性がない。例えば、レガシーマシン900の入力プロセッサシステムは、ハンドヘルドコントローラ1306によって生成され、そこから受信したユーザ入力を解釈することができる入力プロセッサを含む。レガシーシステム900の入力プロセッサシステムは、ハンドヘルドコントローラ414によって生成され、そこから受信したユーザ入力419を解釈することができない。さらに説明すると、レガシーシステム900の入力プロセッサは、ハンドヘルドコントローラ1306から受信され、32ビットで表されるユーザ入力を解釈することができるが、64ビットまたは128ビットで表されるユーザ入力419は、解釈することはできない。
【0194】
一実施形態では、入力エミュレータ1318は、入力プロセッサ1314の一部分である。例えば、入力エミュレータ1318は、入力プロセッサ1314の制御ユニット及び算術論理ユニット(ALU)による実行のために、入力プロセッサ1314のキャッシュ内に格納されたコンピュータプログラムである。
【0195】
一実施形態では、ハンドヘルドコントローラ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のデジタルモーションセンシティブ信号を転送する。
【0196】
実施形態を続けると、入力プロセッサシステム407の通信デバイスは、デジタルモーションセンシティブ信号を受信し、チャネル情報と共にデジタルモーションセンシティブ信号を入力プロセッサ1314に提供する。例えば、入力プロセッサ407の通信デバイスは、入力プロセッサ1314に、第1のデジタルモーションセンシティブ信号が第1のチャネルを介して受信され、第2のデジタルモーションセンシティブ信号が第2のチャネルを介して受信され、第3のデジタルモーションセンシティブ信号が第3のチャネルを介して受信されることを示す。入力プロセッサ1314は、チャネルに基づいて、ハンドヘルドコントローラ414の入力デバイスのどれがユーザ1によって操作されるかを識別する。
【0197】
一実施形態では、ハンドヘルドコントローラ414は、それ自体が入力デバイスである。例えば、ハンドヘルドコントローラ414は、ユーザ1によって、順方向、逆方向、右方向、または左方向に動かされて、その方向に動く仮想オブジェクトを制御する。
【0198】
図14A-1は、ユーザ1によるデフォルトマッピング1308から現在のマッピング1404への変更を説明するためのシステム1400の実施形態の図である。システム1400は、ハンドヘルドコントローラ414、入力プロセッサシステム407、NIC1212、コンピュータネットワーク408、及びサーバシステム404を含む。
【0199】
サーバシステム404のメモリデバイス412は、ユーザアカウント1及び2に関する情報を格納する。例えば、メモリデバイス412は、ユーザアカウント1及び2、ならびにユーザアカウント1及び2へのログインを可能にするための検証情報を格納する。別の例として、メモリデバイス412は、レガシーゲームN及びゲームタイトルGaを有する現在のゲームのプレイ中に、ユーザ1によってユーザアカウント1内に蓄積されたポイント数を格納する。この例では、メモリデバイス412は、レガシーゲームN及びゲームタイトルGaを有する現在のゲームのプレイ中に、ユーザ2によってユーザアカウント2内に蓄積されたポイントの数を格納する。
【0200】
ユーザ1は、ハンドヘルドコントローラ414の1つ以上の更新された入力デバイスを操作し、1つ以上の更新された入力デバイスが操作されると、1つ以上のデジタルモーションセンシティブ信号が、上に示したのと同様の方法で生成される。例えば、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、レガシーゲームNを一時停止する。この例では、レガシーゲームNが一時停止されると、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、デフォルトマッピング1308を現在のマッピング1414に変更する。別の例として、レガシーゲームNをプレイする前に、ユーザ1は、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を操作して、デフォルトのマッピング1308を現在のマッピング1414に変更する。
【0201】
一例として、デフォルトマッピング1308は、コントローラ414の更新された入力デバイスの第1の第1の識別子を、コントローラ1306のレガシー入力デバイスの第1の第1の第1の識別子にマッピングする(
図13)。また、一例として、デフォルトマッピング1308は、コントローラ414の更新された2つ目の入力デバイスの第2の識別子を、コントローラ1306の2つ目のレガシー入力デバイスの第2の識別子にマッピングする。
【0202】
ハンドヘルドコントローラ414の通信デバイスは、1つ以上のデジタルモーションセンシティブ信号を埋め込む1つ以上のデータパケットを生成し、これは、デフォルトのマッピング1308が現在のマッピング1414に変更されることを示す。ハンドヘルドコントローラ414の通信デバイスは、無線転送プロトコルを適用して、1つ以上のデータパケットを生成する。デフォルトマッピング1308を現在のマッピング1414に変更するための1つ以上のデータパケットは、ユーザ入力1402としてハンドヘルドコントローラ414の通信デバイスから無線接続を介して通信デバイス1320へ送信される。
【0203】
通信デバイス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に関連付ける。
【0204】
さらに、現在のマッピング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を将来のユーザ入力に適用する。
【0205】
図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の対応を含む。
【0206】
同様に、現在のマッピング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との間のマッピングを生成する。
【0207】
一実施形態では、複数のレガシー入力デバイス識別子が、1つ以上の更新された入力デバイス識別子にマッピングされる。例えば、左移動ボタン1304A及び右移動ボタン1304Cを識別する複数のレガシー入力デバイス識別子は、ハンドヘルドコントローラ414のサムスティック(左サムスティック1302Aまたは右サムスティック1302B(
図13)など)の単一の更新された入力識別子にマッピングされる。別の例として、前方移動ボタン1304B及び後方移動ボタン1304Dを識別する複数のレガシー入力デバイス識別子が、ハンドヘルドコントローラ414のサムスティック(左サムスティック1302Aまたは右サムスティック1302Bなど)の単一の更新された入力識別子にマッピングされる。
【0208】
一実施形態では、デフォルトマッピング1308は、ハンドヘルドコントローラ1306のレガシー入力デバイスの機能の識別子、及びハンドヘルドコントローラ414の更新された入力デバイスの機能の識別子を含まない。
【0209】
一実施形態では、マッピングは、本明細書で説明されるように、更新されたハンドヘルドコントローラの同じ数の更新された入力デバイスに対する任意数の識別子を含む。また、マッピングには、レガシーハンドヘルドコントローラの同数のレガシー入力デバイスの任意数の識別子が含まれる。
【0210】
図14Bは、レガシーゲームNのプレイ中にデフォルトマッピング1308(
図13)の代わりに現在のマッピング1404を使用することを説明するためのシステム1450の実施形態の図である。ユーザ1は、ユーザアカウント1にログインし、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上を介して現在のマッピング1404を選択する。ハンドヘルドコントローラ414から現在のマッピング1404の選択を示すユーザ入力を受信すると、入力プロセッサ1314は、デフォルトマッピング1308の代わりに現在のマッピング1404を適用するように入力エミュレータ1318に命令する。
【0211】
レガシーゲームNのプレイ中、ハンドヘルドコントローラ414の1つ以上の入力デバイスは、ユーザ1によって操作され、対応する1つ以上の電気信号を生成し、これが最終的にユーザ入力1452を形成する。例えば、ユーザ1が、ハンドヘルドコントローラ414のサムスティックを前方向または後方向または右方向または左方向に動かすと、電気信号が生成される。
【0212】
ハンドヘルドコントローラ414の1つ以上の入力デバイスがユーザ1によって操作されるとき、1つ以上の追加のアナログモーションセンシティブ信号などの対応する電気信号は、モーションセンシティブハードウェアによって生成される。1つ以上の追加のアナログモーションセンシティブ信号は、モーションセンシティブハードウェアからハンドヘルドコントローラ414のアナログ-デジタル変換器に送信される。ハンドヘルドコントローラ414の追加のアナログ-デジタル変換器は、アナログモーションセンシティブ信号をアナログ形式からデジタル形式に変換して、追加のデジタルモーションセンシティブ信号を出力する。追加のデジタルモーションセンシティブ信号は、アナログ-デジタル変換器からハンドヘルドコントローラ414のプロセッサに送信される。
【0213】
ハンドヘルドコントローラ414のプロセッサは、符号化プロトコルを適用して、追加のデジタルモーションセンシティブ信号を符号化して、追加の符号化された信号を出力する。例えば、第1の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414上のオプションボタンの動作を表すと判定すると、ハンドヘルドコントローラ414のプロセッサは、第1の周波数を使用して第1の追加のデジタルモーションセンシティブ信号を符号化する。この例では、第2の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表すと判定することに応じて、ハンドヘルドコントローラ414のプロセッサは、第2の周波数を使用して第2の追加のデジタルモーションセンシティブ信号を符号化する。また、この例では、第3の追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表すと判定したことに応じて、ハンドヘルドコントローラ414のプロセッサは、第3の周波数を使用して第3の追加のデジタルモーションセンシティブ信号を符号化する。
【0214】
ハンドヘルドコントローラ414のプロセッサは、追加の符号化された信号をハンドヘルドコントローラ414の通信デバイスに送信する。ハンドヘルドコントローラ414の通信デバイスは、無線転送プロトコルを追加の符号化された信号に適用して、ユーザ入力1452の例である1つ以上の追加のデータパケットを生成する。ハンドヘルドコントローラ414の通信デバイスは、無線接続を介して入力プロセッサシステム407の通信デバイス1320にユーザ入力1452を送信する。
【0215】
ユーザ入力1452を受信すると、通信デバイス1320は、近距離通信プロトコルを適用して、1つ以上のデータパケットから追加の符号化された信号を抽出し、追加の符号化された信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、追加の符号化された信号を、復号化及び分析するなど、解析して、ハンドヘルドコントローラ414の操作に関連付けられた追加の入力デバイス情報を判定する。例えば、入力プロセッサ1314は、1つ以上の追加のデジタルモーションセンシティブ信号に基づいて、ハンドヘルドコントローラ414の入力デバイスのどれが、ユーザ1によって操作されているか、入力デバイスの動きの量、及び動きの量の方向を識別する。説明すると、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計から出力された追加のアナログモーションセンシティブ信号から生成された1つ以上の追加のデジタルモーションセンシティブ信号から、ハンドヘルドコントローラ414上の特定のボタン(オプションボタンなど)がユーザ1によって選択されているかを判定する。さらに説明するために、第1の追加のデジタルモーションセンシティブ信号が、第1の周波数を使用して符号化されていると判定すると、入力プロセッサ1314は、オプションボタンが選択されていると判定し、第2の追加のデジタルモーションセンシティブ信号が、第2の周波数を使用して符号化されていると判定することに応じて、入力プロセッサ1314は、左サムスティック1302Aがユーザ1によって操作されていると判定する。
【0216】
別の説明として、入力プロセッサ1314は、ハンドヘルドコントローラ414の加速度計、ジャイロスコープ、及び磁力計から出力された追加のアナログモーションセンシティブ信号から生成された1つ以上の追加のデジタルモーションセンシティブ信号から、サムスティックが、前方、後方、右方、左方などの特定の方向に動かされたか、そして移動量が特定の方向で事前判定された閾値を超えているかを判定する。さらに説明するために、入力プロセッサ1314は、左サムスティック1302Aの移動量が所定の移動量を超えると判定して、移動量が所定の閾値を超えると判定する。この説明では、特定の方向での動き、及び動きの量が、サムスティックの機能の例である。ハンドヘルドコントローラ414のボタンの機能の別の例は、ユーザ1によるボタンの選択である。この例では、ボタンの機能は、ボタンが、入力プロセッサ1314によってユーザ1によって選択されていると識別されたときに判定される。ハンドヘルドコントローラ414のボタンの機能の別の例として、入力プロセッサ1314は、ユーザ1がボタンを操作したときに追加のデジタルモーションセンシティブ信号が生成される回数を判定する。回数は、追加のデジタルモーションセンシティブ信号が、ハンドヘルドコントローラ414から入力プロセッサ1314によって受信されると判定された回数に等しい。また、この回数は、ボタンがユーザ1によって選択された回数と同じである。
【0217】
レガシーゲームNのプレイ中に追加の入力デバイス情報を受信すると、入力エミュレータ1318は、メモリデバイス1316内に格納された現在のマッピング1404にアクセスして、ハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の識別子1312に基づいてハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスを識別する。例えば、追加の入力デバイス情報を受信すると、入力エミュレータ1318は、現在のマッピング1404から、ユーザ1によって操作されるハンドヘルドコントローラ414の更新された入力デバイスのうちの1つ以上の更新された入力デバイス識別子1312のうちの1つ以上に対応する1つ以上のレガシー入力デバイス識別子1310を判定する。
【0218】
さらに、入力エミュレータ1318は、追加の入力デバイス情報を生成するためにユーザ1によって操作されるハンドヘルドコントローラ414の1つ以上の機能から、ハンドヘルドコントローラ1306の1つ以上のレガシー入力デバイスの1つ以上の機能を判定する。説明すると、入力エミュレータ1318は、所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。別の説明として、入力エミュレータ1318は、第1の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの2回の選択に対応すると判定する。この説明では、入力エミュレータ1318は、第2の所定の閾値を超える左方向への左サムスティック1302Aの移動量が、ユーザ1による左移動ボタン1304Aの3回の選択に対応すると判定する。
【0219】
入力エミュレータ1318は、ユーザ1によって操作されたハンドヘルドコントローラ414の1つ以上の更新された入力デバイスの1つ以上の更新された入力デバイス識別子1312に対応する1つ以上のレガシー入力デバイス識別子1310を有するユーザ入力1454を生成する。また、ユーザ入力1454は、1つ以上のレガシー入力デバイス識別子1310によって識別される1つ以上のレガシー入力デバイスの1つ以上の機能を含む。入力エミュレータ1318は、ユーザ入力1454を基本ブロックコンパイラ104に送信する。
【0220】
基本ブロックコンパイラ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の方向への移動、またはこれらの組み合わせを可能にするかどうかをさらに判定する。
【0221】
ユーザ入力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つ以上の画像フレームを生成するために実行される。
【0222】
一方で、ユーザ入力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つ以上を実行する。
【0223】
一実施形態では、ハンドヘルドコントローラ414の通信デバイスは、ハンドヘルドコントローラ414のモーションセンシティブハードウェアに結合されている。通信デバイスは、有線転送プロトコルを適用して、有線転送媒介の異なるチャネルを介して入力プロセッサシステム407の通信デバイスに追加のデジタルモーションセンシティブ信号を送信する。例えば、ハンドヘルドコントローラ414上のボタンの動きを表す第1の追加のデジタルモーションセンシティブ信号を受信すると、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第1のチャネルを介して、第1の追加のデジタルモーションセンシティブ信号を転送する。この例では、ハンドヘルドコントローラ414の左サムスティック1302Aの動きを表す第2の追加のデジタルモーションセンシティブ信号の受信に応じて、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第2のチャネルを介して第2の追加のデジタルモーションセンシティブ信号を転送する。また、この例では、ハンドヘルドコントローラ414の右サムスティック1302Bの動きを表す第3の追加のデジタルモーションセンシティブ信号を受信することに応じて、ハンドヘルドコントローラ414の通信デバイスは、有線接続の第3のチャネルを介して第3の追加のデジタルモーションセンシティブ信号を転送する。
【0224】
実施形態を続けると、入力プロセッサシステム407の通信デバイスは、追加のデジタルモーションセンシティブ信号を受信し、チャネル情報と共に追加のデジタルモーションセンシティブ信号を入力プロセッサ1314に提供する。例えば、入力プロセッサ407の通信デバイスは、入力プロセッサ1314に、第1の追加のデジタルモーションセンシティブ信号が第1のチャネルを介して受信され、第2の追加のデジタルモーションセンシティブ信号が第2のチャネルを介して受信され、第3の追加のデジタルモーションセンシティブ信号が第3のチャネルを介して受信されることを示す。入力プロセッサ1314は、チャネルに基づいて、ハンドヘルドコントローラ414の入力デバイスのどれがユーザ1によって操作されるかを識別する。
【0225】
図15は、右サムスティック1302Bの動きに基づいた右移動ボタン1302Cの識別を説明するためのシステム1500の実施形態の図である。システム1500は、ハンドヘルドコントローラ414、ハンドヘルドコントローラ1306、入力プロセッサシステム407、及びエミュレーションプロセッサシステム409を含む。
【0226】
ハンドヘルドコントローラ1306は、方向パッド(Dpad)1510及びパッド1512を含む。方向パッド1510上に、ボタン1302A~1302Bが配置されている。また、パッド1512上には、四角ボタン、三角ボタン、丸ボタン、及びXボタンが配置されている。さらに、ハンドヘルドコントローラ1306は、左ショルダーボタン1506及び右ショルダーボタン1508を含む。
【0227】
ユーザ1は、右サムスティック1302を右方向1502に動かす。右サムスティック1302Bの拡大図に示されるように、ユーザが右サムスティックを右方向1502に動かすと、モーメントは所定の閾値1504を超える。所定の閾値1504は、右サムスティック1302Bの中心を通過する垂直軸である中心軸1516から測定される。例えば、中心軸1516は、右サムスティック1302Bの重心を通過する。説明すると、中心軸1516と所定の閾値1504との間に所定の水平距離がある。一例として、所定の閾値1504は垂直軸である。
【0228】
ハンドヘルドコントローラ414は、右サムスティック1302が右方向1502に移動して所定の閾値1504を超えると、1つ以上のデジタルモーションセンシティブ信号を含むユーザ入力1514を生成する。1つ以上のデジタルモーションセンシティブ信号は、右サムスティック1302Bが右方向1502に移動し、所定の閾値1504を超えることを示す。ユーザ入力1514は、ユーザ入力419の例である(
図13)。ユーザ入力1514は、ハンドヘルドコントローラ414から入力プロセッサシステム407に送られる。
【0229】
入力プロセッサ1314は、ユーザ入力1514内に埋め込まれた1つ以上のデジタルモーションセンシティブ信号を受信し、周波数チャネルに基づいて、1つ以上のデジタルモーションセンシティブ信号が、右サムスティック1302Bがユーザ1によって動かされたことを識別すると判定する。周波数チャネルは、ハンドヘルドコントローラ414から入力プロセッサシステム407にユーザ入力1514内に埋め込まれた1つ以上のデジタルモーションセンシティブ信号を無線で転送するために使用される。第1の周波数を有するチャネルまたは第2の周波数を有するチャネルなどの周波数チャネルの識別子に基づいて、1つ以上のデジタルモーションセンシティブ信号は、右サムスティック1302Bの動きがあることを識別する。例えば、1つ以上のデジタルモーションセンシティブ信号が、第1の周波数でチャネルを介して転送されるとき、入力プロセッサ1314は、右サムスティック1302Bが動かされたと判定し、1つ以上のデジタルモーションセンシティブ信号が第2の周波数でチャネルを介して転送されるとき、入力プロセッサ1314は、左サムスティック1302Aが動かされたと判定する。この例では、第2の周波数は、第1の周波数よりも大きい、または小さい。
【0230】
さらに、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号によって示される方向性に基づいて、右サムスティック1302Bが右方向1502に動かされたことをさらに判定する。例えば、1つ以上のデジタルモーションセンシティブ信号は、ハンドヘルドコントローラ414のジャイロスコープによって生成された1つ以上のアナログモーションセンシティブ信号に基づいて出力され、ジャイロスコープは、右サムスティック1302Bの動きの方向性を測定する。
【0231】
また、入力プロセッサ1314は、ハンドヘルドコントローラ414のポテンショメータによって生成された1つ以上のアナログモーションセンシティブ信号に基づいて出力された1つ以上のデジタルモーションセンシティブ信号に基づいて、右サムスティック1302Bの右方向1502での移動量を判定する。入力プロセッサ1314はさらに、右サムスティック1302Bの移動量が、メモリデバイス1316に格納されている所定の閾値1504を超えると判定する。
【0232】
右サムスティック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回など)に対応することを判定する。
【0233】
入力エミュレータ1318は、右移動ボタン1302Cの操作を示す情報を含むユーザ入力1520を生成する。この情報は、右移動ボタン1302Cの選択と、右移動ボタン1302Cが選択される所定の回数を示す。右移動ボタン1302Cは、実際にはユーザ1によって選択されないことに留意されたい。むしろ、右サムスティック1302Bの動きは、右移動ボタン1302Cの選択としてエミュレートされる。ユーザ入力1520は、ユーザ入力420の例である(
図13)。入力エミュレータ1318は、ユーザ入力1520を基本ブロックコンパイラ104に提供し、これは、
図13を参照して上に示した方法で操作する。
【0234】
図15を参照して上で説明された実施形態は、右サムスティック1302Bを右方向1502に動かすためのものであることに留意されたい。一実施形態では、右サムスティック1302Bの代わりに、左サムスティック1302Aが、右方向、左方向、前方向、または後方向に動かされ、その動きに基づいて、ユーザ入力がハンドヘルドコントローラ414によって生成される。一実施形態では、右方向1502への移動の代わりに、右、前方、後方、またはそれらの組み合わせなどの他の任意の方向への移動が発生する。
【0235】
一実施形態では、ハンドヘルドコントローラ414の代わりに、ホイールコントローラが使用される。ホイールコントローラはドライビングホイールの形をしている。一例として、ホイールコントローラは、左サムスティック1302A及び右サムスティック1302Bを含まない。代わりに、ドライビングホイールは、ユーザ1によって操作されて、レガシーゲームNの仮想オブジェクトを左方向、右方向、前方向、及び後方向に動かす。ドライビングホイールは、時計回りまたは反時計回りに回転されることができる。ドライビングホイールがユーザ1によって時計回りに回転されると、入力プロセッサ1314は、1つ以上のデジタルモーションセンシティブ信号に基づいて、ドライビングホイールが回転されたこと、及びドライビングホイールが、反時計回りの方向上で時計回りに回転されたかどうかを判定する。入力プロセッサ1314はさらに、回転量が事前設定された閾値を超えるかどうかを判定する。入力プロセッサ1314は、ドライビングホイールの識別子、回転方向、及び回転量が事前設定された閾値を超えるかどうかの指示などの情報を入力エミュレータ1318に提供する。入力エミュレータ1318は、デフォルトマッピングまたは現在のマッピングなどのマッピングにアクセスして、ハンドヘルドコントローラ1306の対応するボタン、及び対応するボタンの操作を識別し、ユーザ入力を生成する。例えば、入力エミュレータ1318は、情報、及びマッピングに基づいて、ハンドヘルドコントローラ1306の対応するボタンが選択されたこと、及び対応するボタンがユーザ入力を生成するために選択された回数を識別する。入力エミュレータ1318は、ユーザ入力を
図13または14Bを参照して上に示した方法で操作する基本ブロックコンパイラ104に提供する。
【0236】
図16Aは、タッチパッド1602がユーザ1によって選択されたときの十字線の仮想画像の生成を説明するためのシステム1600の実施形態の図である。タッチパッド1602は、ボタンの一例である。システム1600は、入力プロセッサシステム407、ハンドヘルドコントローラ414、及びエミュレーションプロセッサシステム409を含む。ハンドヘルドコントローラ414は、タッチパッド1602、方向パッド1604、パッド1606、左サムスティック1302A、及び右サムスティック1302Bを含む。
【0237】
レガシーゲーム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に送信する。
【0238】
入力プロセッサ1314は、
図13を参照して説明したのと同様の方法で、タッチパッド1602がユーザ1によって選択されたことを判定または識別する。例えば、1つ以上の符号化された信号内に符号化された1つ以上のデジタルモーションセンシティブ信号が、所定の周波数チャネルに一致するハンドヘルドコントローラ414からの周波数で受信されると判定することに応じて、入力プロセッサ1314は、タッチパッド1602が選択されたと判定する。この例では、所定の周波数チャネルは、メモリデバイス1316内に格納されている。また、この例では、入力プロセッサ1314は、符号化された信号にフーリエ変換を適用することによって周波数を判定する。
【0239】
入力プロセッサ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上の選択場所は、初期入力デバイス情報及び追加の入力デバイス情報などの入力デバイス情報の例である。
【0240】
入力プロセッサ1318は、選択されたタッチパッド1602の識別子及びタッチパッド1602上の選択場所を入力エミュレータ1318に提供する。入力エミュレータ1318は、マッピング1610にアクセスして、選択されたタッチパッド1602の識別子に基づいて、ハンドヘルドコントローラ1306上の対応するボタンを識別する。例えば、入力エミュレータ1318は、マッピング1610から、ハンドヘルドコントローラ1306上の選択ボタンが、タッチパッド1602と固有の関係を有することを判定する。マッピング1610は、デフォルトのマッピング1308(
図13)または現在のマッピング1404(
図14A-2)の一例である。
【0241】
また、入力エミュレータ1318は、ブロックディスパッチャ302に要求を送信して、レガシーゲームNの仮想シーンを有する画像フレームのサイズを取得する。一例として、サイズが要求されるレガシーゲームNの画像フレームは、ユーザ入力1612に基づいてユーザ入力1614が生成された後に生成される。説明すると、サイズが要求されるレガシーゲームNの第1の画像フレームは、ユーザ入力1614に基づいて生成され、第1の画像フレームが生成される前に、ユーザ入力1614に基づいて他の画像フレームは生成されない。ブロックディスパッチャ302は、画像フレームのサイズを入力エミュレータ1318に提供する。例えば、ブロックディスパッチャ302は、ユーザ入力1614に基づいて生成される画像フレームの直前に生成された先行する画像フレームと同じになるように画像フレームのサイズを提供する。説明すると、ユーザ入力1614に基づいて生成される画像フレームの生成と前の画像フレームとの間に、ブロックディスパッチャ302によって生成される他の画像フレームはない。入力エミュレータ1318は、ブロックディスパッチャ302に結合されている。
【0242】
入力エミュレータ1318は、ユーザ入力1614に基づいて生成される画像フレーム内の十字線の仮想画像の場所を判定する。画像フレーム内の十字線の仮想画像の場所は、タッチパッド1602上の選択場所に対応する。画像フレーム内の十字線の仮想画像の場所が、タッチパッド1602上の選択場所と1対1の関係を有する方法の説明が、
図16Bを参照して説明されている。
【0243】
入力エミュレータ1318は、ハンドヘルドコントローラ1306上の選択ボタンの指示と、ユーザ入力1614に基づいて生成される画像フレーム内の十字線の仮想画像の場所と、を有するユーザ入力1614を生成する。ユーザ入力1614は、入力エミュレータ1318からブロックコンパイラ104に提供される。
【0244】
ユーザ入力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の選択場所に対応する場所で画像フレーム内に生成される。
【0245】
一実施形態では、入力エミュレータ1318は、ブロックディスパッチャ302が画像フレーム内の十字線の仮想画像の位置を判定するためのコマンドを生成し、コマンドをブロックディスパッチャ302に送信する。例えば、コマンドは、ブロックディスパッチャ302によって生成される画像フレームが、ユーザ1によるタッチパッド1602上の選択場所に比例する場所において、十字線の仮想画像を含むものであることをブロックディスパッチャ302に示す。コマンドは、ユーザ1によるタッチパッド1602上の選択場所を含む。入力エミュレータ1318は、ブロックディスパッチャ302に結合されている。この実施形態では、ユーザ入力1614は、画像フレーム内の十字線の仮想画像の場所を含まない。ブロックディスパッチャ302は、基本ブロック1~nのうちの1つ以上を実行して、画像フレームを生成する。さらに、ブロックディスパッチャ302は、
図16Bを参照してなど、本明細書で説明するのと同じ方法で、画像フレーム内の十字線の仮想画像の場所を判定し、そこでは、入力エミュレータ1318が、ユーザ1によるタッチパッド1602上の選択場所に基づいて、画像フレーム内の十字線の仮想画像の位置を判定する。
【0246】
図16Bは、システム1650の実施形態の図であり、ユーザ1によるタッチパッド1062上の選択場所と、仮想環境452を有する画像フレーム1654上の十字線1652の場所との間の対応を示す。この対応は、入力エミュレータ1318によって判定される(
図16A)。画像フレーム1654は、ディスプレイデバイス410のディスプレイ画面に表示される(
図4B)。システム1650は、タッチパッド1602及び画像フレーム1654を含む。
【0247】
タッチパッド1602は、上部エッジ1666A、右エッジ1666B、下部エッジ1666C、及び左エッジ1666Dを有する。上部エッジ1666Aは、右エッジ及び左エッジに隣接し、接続している。また、下部エッジ1666Cは、右エッジ及び左エッジに隣接し、接続している。下部エッジ1666Cは、上部エッジ1666Aに面し、右エッジ1666Bは、左エッジ1666Dに面している。
【0248】
タッチパッド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軸に垂直である。
【0249】
同様に、画像フレーム1654は、上部エッジ1668A、右エッジ1668B、下部エッジ1668C、及び左エッジ1668Dを有する。上部エッジ1668Aは、右エッジ及び左エッジに隣接し、接続している。また、下部エッジ1668Cは、画像フレーム1654の右エッジ及び左エッジに隣接し、接続している。下部エッジ1668Cは上部エッジ1668Aに面し、右エッジ1668Bは左エッジ1668Dに面している。
【0250】
十字線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軸に沿った距離である。
【0251】
入力エミュレータ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倍であると判定する。
【0252】
図17は、システム1700の実施形態の図であり、異なるタイプのハンドヘルドコントローラを用いた異なるマッピングの使用を示している。システム1700は、ホイールコントローラ1702、ハンドヘルドコントローラ414、及び入力プロセッサシステム407を含む。ホイールコントローラ1702は、ドライビングホイールの形状を有し、ステアリングホイール1708、方向パッド1706、正方形ボタン、三角形ボタン、円形ボタン、及びXボタンなどの更新された入力デバイスを含む。
【0253】
ホイールコントローラ1702は、ハンドヘルドコントローラ414とは異なるタイプであることに留意されたい。例えば、ハンドヘルドコントローラ414は、左ハンドル1704A及び右ハンドル1704Bを有し、ステアリングホイールを含まない。ハンドル1704A及び1704Bは、ハンドヘルドコントローラ414の本体から下向きに延在する。比較すると、ホイールコントローラ1702は、ステアリングホイール1708を有するが、左右のハンドルを含まない。
【0254】
さらに、第1のハンドヘルドコントローラと第2のハンドヘルドコントローラの両方が同じタイプのものであるが、異なるエンティティによって製造されているとき、第1のハンドヘルドコントローラのサブタイプは、第2のハンドヘルドコントローラのサブタイプとは異なるサブタイプである。例えば、Logitech(登録商標)corporationが製造したホイールコントローラは、Sony(登録商標)corporationが製造したホイールコントローラとは異なるホイールコントローラのサブタイプである。別の例として、Sony(登録商標)corporationによって製造されたハンドヘルドコントローラは、Microsoft(登録商標)corporationによって製造されたハンドヘルドコントローラとは異なるタイプのハンドヘルドコントローラである。
【0255】
ホイールコントローラ1702は、ハンドヘルドコントローラ414の内部構成要素と同じまたは類似の内部構成要素を有する。例えば、ホイールコントローラ1702は、モーションセンシティブハードウェア、アナログ-デジタル変換器、プロセッサ、及び通信デバイスを含む。ホイールコントローラ1702の内部構成要素は、ハンドヘルドコントローラ414の内部構成要素が互いに結合されるのと同じ方法で互いに結合される。
【0256】
ユーザ1が、ハンドヘルドコントローラ414またはホイールコントローラ1702などの更新されたコントローラを入力プロセッサシステム407と結合するとき、ユーザ1は、更新されたコントローラの1つ以上の更新された入力デバイスを操作して、更新されたコントローラのタイプ及びサブタイプを提供する。例えば、ユーザ1は、ハンドヘルドコントローラ414を入力プロセッサシステム407から切り離し、代わりに、ホイールコントローラ1702を入力プロセッサシステム407に結合する。更新されたコントローラがユーザ1によって操作されると、更新されたコントローラは、更新されたコントローラのタイプを有する識別信号を生成し、識別信号を入力プロセッサシステム407に送信する。また、更新されたコントローラは、更新されたコントローラのサブタイプを有する識別信号を生成し、入力プロセッサシステム407に識別信号を送信する。入力プロセッサ1314は、更新されたコントローラのタイプ及びサブタイプを受信し、タイプ及びサブタイプを入力エミュレータ1318に提供する。
【0257】
更新されたコントローラのタイプ及びサブタイプを受信すると、入力エミュレータ1318は、タイプ及びサブタイプに基づいて、マッピング1710またはマッピング1712を選択する。例えば、入力エミュレータ1318は、更新されたコントローラのタイプがハンドヘルドコントローラ414であり、更新されたコントローラのサブタイプがSony(登録商標)corporation製のハンドヘルドコントローラ414であるときに、マッピング1710を選択する。更新されたコントローラのタイプが、ホイールコントローラ1702であり、更新されたコントローラのサブタイプが、Sony(登録商標)corporation製のホイールコントローラ1702であるときに、入力エミュレータはマッピング1712を選択する。マッピング1710の例は、ユーザアカウント1のデフォルトのマッピング、またはユーザアカウント1の現在のマッピングである。マッピング1712の例は、ユーザアカウント1のデフォルトのマッピング、またはユーザアカウント1の現在のマッピングである。
【0258】
レガシーゲーム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に送信する。
【0259】
通信デバイス1320は、1つ以上の符号化信号を抽出するために無線転送プロトコルを1つ以上のデータパケットに適用し、1つ以上の符号化信号を入力プロセッサ1314に送信する。入力プロセッサ1314は、1つ以上の符号化された信号から、ホイールコントローラ1702の更新された入力デバイスのどれがユーザ1によって操作されているかを識別し、1つ以上の更新された入力デバイスの1つ以上の識別子を入力エミュレータ1318に提供する。入力エミュレータ1318は、マッピング1712にアクセスし、マッピング1712を適用して、ハンドヘルドコントローラ1306(
図13)の対応する1つ以上のレガシー入力デバイスを識別して、ユーザ入力420を生成する。
【0260】
図18は、ゲームコンソール402からゲームコンソール1202への現在のマッピングの通信を説明するためのシステム1800の実施形態の図である。システム1800は、ゲームコンソール402、コンピュータネットワーク408、サーバシステム404、及びゲームコンソール1202を含む。
【0261】
ゲームコンソール1202は、入力プロセッサシステム1207を含み、これは、入力プロセッサ1804、入力エミュレータ1806、メモリデバイス1808、及び通信デバイス1810を含む。説明として、入力エミュレータ1806は、ゲームコンソール1202内に実装されると、ハンドヘルドコントローラ1212を使用することによってレガシーゲームNのプレイを可能にする。通信デバイス1810の例は、近距離通信プロトコルを適用する通信デバイスである。
【0262】
通信デバイス1810は、入力プロセッサ1804に結合されている。入力プロセッサ1804及び入力エミュレータ1806は、メモリデバイス1808に結合されている。入力プロセッサシステム1207は、バス1218に結合されている。
【0263】
ゲームコンソール402の入力プロセッサ1314は、メモリデバイス1316からの現在のマッピング1404にアクセス(読み取りなど)し、現在のマッピング1404をNIC1212に送信する。例えば、現在のマッピング1404が生成された後の所定の期間内に、入力プロセッサ1314は、現在のマッピング1404をNIC1212に送信する。説明すると、現在のマッピング1404が作成された直後に、現在のマッピング1404は、メモリデバイス1316に格納され、同時にNIC1212に送信される。NIC1212は、1つ以上のデータパケットを生成するためにネットワーク通信プロトコルを現在のマッピング1404に適用し、サーバシステム404の1つ以上のメモリデバイスに格納するために、コンピュータネットワーク408を介して1つ以上のデータパケットをサーバシステム404に送信する。
【0264】
ユーザ1は、ハンドヘルドコントローラ1212を使用して、ユーザアカウント1にログインし、ゲームコンソール1202を介してレガシーゲームNにアクセスする。さらに、レガシーゲームNのプレイの前またはプレイ中に、ユーザ1は、ハンドヘルドコントローラ1212の1つ以上の更新された入力デバイスを選択して、サーバシステム404から現在のマッピング1404にアクセスするための表示(要求など)を生成する。ハンドヘルドコントローラ1212の1つ以上の更新された入力デバイスの選択を受信すると、ハンドヘルドコントローラ1212は、無線転送プロトコルを適用して1つ以上のデータパケットを生成し、1つ以上のデータパケットを通信デバイス1810に送信する。通信デバイス1810は、無線転送プロトコルを適用して、現在のマッピング1404がユーザアカウント1について取得されるべきであるという指示を取得し、その指示をゲームコンソール1202のメモリデバイス1808に格納する。
【0265】
ゲームコンソール1202のCPU922(
図9B)などのCPUは、メモリデバイス1808から現在のマッピング1404を取得するための指示にアクセスし、その指示をNIC1210に送信する。NIC1210は、現在のマッピング1404を取得するための指示にネットワーク通信プロトコルを適用して、1つ以上のデータパケットを生成し、コンピュータネットワーク408を介してサーバシステム404に1つ以上のデータパケットを送信する。
【0266】
ゲームコンソール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つ以上のデータパケットを送信する。
【0267】
ゲームコンソール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を送信する。
【0268】
ユーザ入力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つ以上を実行する。
【0269】
図19Aは、画像1900のスクリーンショットであり、ハンドヘルドコントローラ414またはホイールコントローラ1702(
図17)またはハンドヘルドコントローラ1212(
図18)などの更新されたハンドヘルドコントローラのタイプ及びサブタイプの受信を示している。画像1900は、レガシーゲームNの仮想環境452(
図4B)を含む。
【0270】
レガシーゲーム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)を表示する。
【0271】
図19Bは、メニュー1912を説明するための画像1910のスクリーンショットである。メニュー1910は、ボタンを再割り当てするためのボタンの再割り当てオプションと、ガン形状コントローラが入力プロセッサシステム407と共に第2の更新されたハンドヘルドコントローラとして使用されることを入力プロセッサシステム407(
図4B)に示すための銃型ハンドヘルドコントローラオプションと、ホイールコントローラが入力プロセッサシステム407(
図4B)と共に第2の更新されたハンドヘルドコントローラとして使用されることを入力プロセッサシステム407に示すためのホイールハンドヘルドコントローラオプションと、を含む。銃型コントローラは、更新されたハンドヘルドコントローラのタイプの一例である。
【0272】
ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、ホイールハンドヘルドコントローラオプションを選択する。ホイールハンドヘルドコントローラオプションが選択されると、エミュレーションプロセッサシステム409のCPUは、第1のサブタイプコントローラオプション及び第2のサブタイプコントローラオプションを含むメニューをディスプレイデバイス410のディスプレイ画面に表示するようにエミュレーションプロセッサシステム409のGPUに命令する。第1のサブタイプコントローラ及び第2のサブタイプコントローラは、ホイールコントローラのサブタイプの例である。
【0273】
ユーザ1は、第2の更新されたハンドヘルドコントローラの1つ以上の更新された入力デバイスを操作して、第2のサブタイプコントローラオプションを選択する。第2のサブタイプコントローラオプションの選択を受信すると、エミュレーションプロセッサシステム409のCPUは、レガシーゲームNのプレイを継続または開始するようにエミュレーションプロセッサシステム409のGPUに指示する。
【0274】
図20は、デフォルトマッピングなどのマッピング2002を説明するための画像2000のスクリーンショットの実施形態である。画像2000は、レガシーゲームNの仮想環境452を含む。マッピング2002は、デフォルトのマッピング1308(
図13)の例である。レガシーゲームNのプレイ中またはプレイ前に、エミュレーションプロセッサシステム409のCPUは、ディスプレイデバイス410のディスプレイ画面にマッピング2002を表示するようにエミュレーションプロセッサ409のGPUに指示する。
【0275】
マッピング2022は、レガシーハンドヘルドコントローラの入力デバイスと更新されたハンドヘルドコントローラの入力デバイスとの間の対応または1対1の関係などの固有の関係を含む。例えば、三角形ボタンなどのレガシーハンドヘルドコントローラのレガシー入力デバイス1は、三角形ボタンなどの更新されたハンドヘルドコントローラの更新された入力デバイス1にマッピングされる。別の例として、更新されたハンドヘルドコントローラのタッチパッド1602(
図16A)などのレガシー入力デバイス2は、レガシーハンドヘルドコントローラの選択ボタンなどの更新された入力デバイス2と対応している。さらに別の例として、レガシーハンドヘルドコントローラのレガシー入力デバイス3は、更新されたハンドヘルドコントローラの更新された入力デバイス2と1対1の関係を有する。
【0276】
図21は、本開示の実施態様に従って、クラウドビデオゲームをクライアントデバイスにストリーミングするために実行される様々な操作を概念的に示すフロー図である。クライアントデバイスの例としては、ハンドヘルドコントローラとディスプレイデバイスの組み合わせ、スマートフォン、ハンドヘルドコントローラとディスプレイデバイス及びゲームコンソールの組み合わせ、ハンドヘルドコントローラとヘッドマウントディスプレイ(HMD)の組み合わせ、ハンドヘルドコントローラとゲームコンソールとヘッドマウントディスプレイの組み合わせ、タブレット及びコンピュータがあげられる。ゲームサーバ2102はビデオゲームまたはゲームコードGCNなどのゲームプログラムを実行し、生の(圧縮されていない)ビデオ2104及びオーディオ2106を生成する。仮想環境452の提示中の、仮想環境452(
図4A)及びオーディオ出力はビデオ2104及びオーディオ2106の例である。ゲームサーバ2102はサーバシステム404(
図4)の例である。示された図における参照番号2108で示されるように、ビデオ2104及びオーディオ2106は、ストリーミングのために補足されコード化される。コード化で、ビデオとオーディオストリームの圧縮がもたらされ、帯域幅の使用が減り、ゲームエクスペリエンスを最適化する。コード化形式の例としては、H.265/MPEG-H、H.264/MPEG-4、H.263/MPEG-4、H.262/MPEG-2、WMV、VP6/7/8/9などが挙げられる。
【0277】
符号化されたオーディオ2110及び符号化されたビデオ2112は、コンピュータネットワーク408の一例であるコンピュータネットワーク2120を介した送信の目的のために、参照番号2114に示されるように、ネットワークパケットにさらにパケット化される(
図4A)。いくつかの実施形態では、ネットワークパケット符号化プロセスはまた、データ暗号化プロセスを採用し、それにより、強化されたデータセキュリティを提供する。図示した実施態様では、オーディオパケット2116及びビデオパケット2118は、コンピュータネットワーク2120を介した転送のために生成される。
【0278】
ゲームサーバ2102はさらに、触覚フィードバックデータ2122を生成し、これもまた、ネットワーク送信のためにネットワークパケットにパケット化される。図示した実装形態では、触覚フィードバックパケット2124は、コンピュータネットワーク2120を介した転送のために生成される。
【0279】
生のビデオ及びオーディオ及び触覚フィードバックデータを生成する前述の操作は、データセンタのゲームサーバ2102上で実行され、ビデオ及びオーディオを符号化し、符号化されたオーディオ/ビデオ及び触覚フィードバックデータを転送のためにパケット化する操作は、データセンタのストリーミングエンジンによって実行される。示されるように、オーディオ、ビデオ、及び触覚フィードバックパケットは、コンピュータネットワーク2120を介して転送される。参照番号2126において示されているように、オーディオパケット2116、ビデオパケット2118、及び触覚フィードバックパケット2124は、クライアントデバイスによって、例えば、解析されるなどして分解され、クライアントデバイスにおいて、ネットワークパケットから符号化されたオーディオ2128、符号化されたビデオ2130、及び触覚フィードバックデータ2122を抽出する。データが暗号化されている場合、データも暗号化される。符号化されたオーディオ2128及び符号化されたビデオ2130は、次いで、参照番号2134に示されるように、クライアントデバイスによって復号化され、クライアントデバイスのディスプレイデバイス2140上でレンダリングするためのクライアント側の生のオーディオ及びビデオデータを生成する。触覚フィードバックデータ2122は、クライアントデバイスのプロセッサによって処理されて、コントローラデバイス2142または他のインターフェースデバイス、例えば、HMDなどで触覚フィードバック効果を生成し、それらを介して触覚効果がレンダリングされることができる。コントローラデバイス2142は、クライアントデバイスのハンドヘルドコントローラ414(
図4A)または1212(
図12)などのハンドヘルドコントローラの一例である。触覚効果の一例は、コントローラデバイス2142のバイブレーションまたはランブルである。
【0280】
ビデオゲームは、プレイヤーまたはユーザの入力に応答し、そのため、プレイヤー入力の転送及び処理について上述した同様の手順フローが実行されるが、クライアントデバイスからサーバへの逆方向であることが理解されよう。図示されるように、コントローラデバイス2142または別の更新されたコントローラ、例えば、ヘッドマウントディスプレイなど、またはそれらの組み合わせは、入力データ2148を生成する。入力データ2148は、ユーザ入力としてコンピュータネットワーク2120を介してデータセンタに転送するために、クライアントデバイスでパケット化される。入力データパケット2146は、ゲームサーバ2102によってパケット解除及び再構成されて、データセンタ側で入力データ2148を定義する。入力データ2148は、ゲームサーバ2102に供給され、ゲームサーバ2102は、入力データ2148を処理して、レガシーゲームNのゲーム状態を生成する。
【0281】
オーディオパケット2116、ビデオパケット2118、及び触覚フィードバックパケット2124のコンピュータネットワーク2120を介した転送中に、いくつかの実施形態では、コンピュータネットワーク2120を介したデータの送信が監視されて、サービス品質を保証する。例えば、アップストリーム及びダウンストリームネットワーク帯域幅の両方を含む、コンピュータネットワーク2120のネットワーク状態は、参照番号2150によって示されるように監視され、ゲームストリーミングは、利用可能な帯域幅の変化に応じて調整される。すなわち、ネットワークパケットの符号化及び復号化は、参照番号2152によって示されるように、現在のネットワーク状態に基づいて制御される。
【0282】
図22は、ゲームコンソール2200の実施形態のブロック図であり、ゲームコンソール2200は、クライアントデバイスのディスプレイデバイスとのインターフェースと互換性があり、コンピュータネットワーク2120(
図21)を介して、サーバシステム404(
図4A)などのゲームホスティングシステムと通信することができる。ゲームコンソール2200は、ゲームコンソール402(
図4A)及びゲームコンソール1202(
図12)の例である。ゲームコンソール2200は、データセンタ内に配置されているか、またはユーザ1または2などのプレイヤーが位置する場所に配置されている。いくつかの実施形態では、ゲームコードGCNを実行するために、ゲームコンソール2200が使用され、HMD2205上にレガシーゲームNを表示する。ゲームコンソール2200には、ゲームコンソール2200に接続可能な様々な周辺機器が設けられている。ゲームコンソール2200は、セルプロセッサ2228、ダイナミックランダムアクセスメモリ(XDRAM)ユニット2226、専用ビデオランダムアクセスメモリ(VRAM)ユニット2232を備えたリアリティシンセサイザグラフィックプロセッサユニット2230、及び入出力(I/O)ブリッジ2234を有する。ゲームコンソール2200はまた、ディスク2240aから読み取るためのBluRay(登録商標)ディスク読み取り専用メモリ(BD-ROM)光ディスクリーダ2240と、I/Oブリッジ2234を介してアクセス可能なリムーバブルスロットインハードディスクドライブ(HDD)2236と、を有する。オプションとして、ゲームコンソール2200はまた、コンパクトフラッシュ(登録商標)メモリカードを読み取るためのメモリカードリーダ2238、メモリスティック(登録商標)メモリカード、等も含み、これは、I/Oブリッジ2234を介して同様にアクセス可能である。I/Oブリッジ2234は、USB2.0ポート2224、ギガビットイーサネット(登録商標)ポート2222、IEEE802.11b/gワイヤレスネットワーク(Wi-Fi(登録商標))ポート2220、及びBluetooth(登録商標)接続をサポートできるBluetooth(登録商標)ワイヤレスリンクポート2218にも接続する。
【0283】
操作中、I/Oブリッジ2234は、ゲームコントローラからの、及びHMD2205からのデータを含む、すべてのワイヤレス、USB、及びイーサネット(登録商標)データを取り扱う。例えば、プレイヤーが、ゲームコードGCNなどのゲームコードの一部分の実行によって生成されたレガシーゲームNをプレイしているとき、I/Oブリッジ2234は、ゲームコントローラ2142から、及び/またはHMD2205から、Bluetooth(登録商標)リンクを介して本明細書で説明する入力データまたは入力信号を受信し、入力データをセルプロセッサ2228に向け、セルプロセッサ2228は、それに応じて、レガシーゲームNの現在の状態を更新する。例として、HMD2205内のカメラは、プレイヤーのジェスチャをキャプチャして、ジェスチャを表す画像を生成する。
【0284】
ワイヤレス、USB、及びイーサネット(登録商標)ポートはまた、ゲームコントローラ2142及び2203、HMD2205、及び、例えば、リモートコントロール2204、キーボード2206、マウス2208、例えば、Sony Playstation Portable(登録商標)エンターテインメントデバイス、等などのポータブルエンターテインメントデバイス2210、例えば、EyeToy(登録商標)ビデオカメラ2212、等などのビデオカメラ、マイクロフォンヘッドセット2214、及びマイクロフォン2215などの、その他の周辺機器用の接続を提供する。ポータブルエンターテインメントデバイス2210は、ゲームコントローラの一例である。いくつかの実施形態では、そのような周辺機器は、無線でゲームコンソール2200に接続され、例えば、ポータブルエンターテインメントデバイス2210は、Wi-Fi(登録商標)アドホック接続を介して通信し、一方で、マイクロフォンヘッドセット2214は、Bluetooth(登録商標)リンクを介して通信する。
【0285】
これらのインターフェースの提供は、ゲームコンソール2200が、デジタルビデオレコーダ(DVR)、セットトップボックス、デジタルカメラ、ポータブルメディアプレイヤー、ボイスオーバーインターネットプロトコル(IP)電話、モバイル電話、プリンタ、スキャナなどの他の周辺機器とも互換性がある可能性があることを意味する。
【0286】
さらに、レガシーメモリカードリーダ2216は、USBポート2224を介してゲームコンソール2200に接続され、ゲームコンソール2200によって使用される種類のメモリカード2248の読み取りを可能にする。ゲームコントローラ2142及び2203、ならびにHMD2205は、Bluetooth(登録商標)リンク2218を介してゲームコンソール2200と無線で通信するように操作可能であるか、またはUSBポート2224に接続されるように操作可能であり、それによって電力も受け取り、これによってゲームコントローラ2142及び2203、ならびにHMD2205の電池を充電する。いくつかの実施形態では、ゲームコントローラ2142及び2203の各々、ならびにHMD2205は、メモリ、プロセッサ、メモリカードリーダ、例えば、フラッシュメモリなどの固定メモリ、例えば、照光式球形セクション、発光ダイオード(LED)、または赤外線ライト、等、などの発光体、超音波通信用のマイクロフォン及びスピーカー、音響チャンバ、デジタルカメラ、内部クロック、例えば、ゲームコンソール2200に面する球形セクションなどの認識可能な形状、及び、例えば、Bluetooth(登録商標)、Wi-Fi(登録商標)等、などのプロトコルを使用する無線デバイスを含む。
【0287】
ゲームコントローラ2142は、プレイヤー1または2または3または4などのプレイヤーが両手で使用するように設計されたコントローラであり、ゲームコントローラ2203は、アタッチメントを備えた片手コントローラである。HMD2205は、頭上やプレイヤーの眼前にフィットするように設計されている。1つ以上のアナログジョイスティック及び従来の制御ボタンに加えて、各ゲームコントローラ2142及び2203は、3次元場所判定の影響を受けやすい。同様に、HMD2205は、3次元場所判定の影響を受けやすくなっている。その結果として、いくつかの実施形態では、ゲームコントローラ2142及び2203、ならびにHMD2205を用いるユーザによるジェスチャ及び動作は、従来のボタンまたはジョイスティックコマンドに加えて、またはその代わりに、ゲームへの入力として変換される。オプションで、例えば、Playstation(登録商標)ポータブルデバイスなどの他のワイヤレス対応周辺デバイスが、コントローラとして使用される。Playstation(登録商標)ポータブルデバイスの場合、追加のゲームまたは制御情報、例えば、制御命令または生存数などが、デバイスのディスプレイ画面上に提供されている。いくつかの実施形態では、例えば、ダンスマット(図示せず)、ライトガン(図示せず)、ステアリングホイール及びペダル(図示せず)、特注のコントローラ、などの他の代替的または補足的な制御デバイスが使用される。特注のコントローラの例は、高速応答クイズゲーム用の単一の、またはいくつかの大きなボタン(同様に図示せず)を含む。
【0288】
リモートコントロール2204はまた、Bluetooth(登録商標)リンク2218を介してゲームコンソール2200と無線で通信するように操作可能である。リモートコントロール2204は、BluRay(登録商標)ディスクBD-ROMリーダ2240の操作に適した、かつ、ディスクコンテンツのナビゲーションに適した制御を含む。
【0289】
BluRay(登録商標)ディスクBD-ROMリーダ2240は、従来の録音済み及び録音可能なCD、及びいわゆるスーパーオーディオCDに加えて、ゲームコンソール2200と互換性のあるCD-ROMを読み取るように操作可能である。BluRay(登録商標)ディスクBD-ROMリーダ2240はまた、従来の事前記録及び記録可能なDVDに加えて、ゲームコンソール2200と互換性のあるデジタルビデオディスク-ROM(DVD-ROM)を読み取るように操作可能である。BluRay(登録商標)ディスクBD-ROMリーダ2240はさらに、ゲームコンソール2200と互換性のあるBD-ROM、ならびに、従来の事前記録された、及び記録可能なBluRay(登録商標)ディスクを読み取るように操作可能である。
【0290】
ゲームコンソール2200は、オーディオコネクタ2250及びビデオコネクタ2252を介して、例えば、モニターまたはテレビなどの、ディスプレイ画面2244及び1つ以上のラウドスピーカー2246を有するディスプレイ及びサウンド出力デバイス2242に、リアリティシンセサイザーグラフィックスユニット2230を通じて生成されたか、または復号されたオーディオ及びビデオを供給するように操作可能であり、または、Bluetooth(登録商標)ワイヤレスリンクポート2218を介して、HMD2205のディスプレイデバイスにオーディオ及びビデオを供給するように操作可能である。オーディオコネクタ2250は、様々な実施形態において、従来のアナログ及びデジタル出力を含み、一方で、ビデオコネクタ2252は、コンポーネントビデオ、Sービデオ、コンポジットビデオ、及び1つ以上のハイデフィニションマルチメディアインターフェース(HDMI(登録商標))出力を様々に含む。その結果、ビデオ出力は、位相交互線(PAL)や全米テレビジョンシステム委員会(NTSC)などの形式、または2220p、1080i、または1080pの高解像度であり得る。オーディオ処理、例えば、生成、復号化などは、セルプロセッサ2208によって実行される。ゲームコンソール2200のオペレーティングシステムは、Dolby(登録商標)5.1サラウンドサウンド、Dolby(登録商標)シアターサラウンド(DTS)、及びBlu-Ray(登録商標)ディスクからの7.1サラウンドサウンドの復号化をサポートしている。ディスプレイ及びサウンド出力デバイス2242は、ディスプレイデバイス410の一例である(
図4A)。
【0291】
いくつかの実施形態では、例えば、ビデオカメラ2212などのビデオカメラは、単一の電荷結合デバイス(CDD)、LEDインジケータ、及びハードウェアベースのリアルタイムデータ圧縮及び符号化装置を含み、圧縮されたビデオデータは、ゲームコンソール2200による復号化のためのイントラ画像ベースの動画専門家集団(MPEG)規格などの適切な形式で送信されるようになっている。ビデオカメラ2212のLEDインジケータは、ゲームコンソール2200からの適切な制御データに応じて、例えば、著しく不利な照明状態などを照射するように配置されている。ビデオカメラ2212のいくつかの実施形態は、USB、Bluetooth(登録商標)、またはWi-Fi(登録商標)通信ポートを介してゲームコンソール2200に接続する。ビデオカメラの様々な実施形態は、1つ以上の関連するマイクロフォンを含み、オーディオデータを送信することもできる。ビデオカメラのいくつかの実施形態では、CCDは、高解像度ビデオキャプチャに適した解像度を有する。使用時、ビデオカメラによってキャプチャされた画像は、ゲーム内に組み込まれる、またはゲーム制御入力として解釈される。別の実施形態では、ビデオカメラは、赤外線光を検出するのに適した赤外線カメラである。
【0292】
様々な実施形態において、例えば、ビデオカメラまたはリモートコントロールなどの周辺デバイスとのゲームコンソール2200の通信ポートの1つを介したデータ通信を成功させるために、デバイスドライバなどの適切なソフトウェアが提供されている。
【0293】
いくつかの実施形態では、ゲームコンソール2200、ゲームコントローラ2142(
図21)または2203、及びHMD2205を含む前述のシステムデバイスは、HMD2205が、レガシーゲームNのインタラクティブセッションのビデオを表示及びキャプチャすることを可能にする。システムデバイスは、レガシーゲームNの対話型セッション、プレイヤー1と他のプレイヤーとの間の対話性を規定する対話型セッション、及びレガシーゲームNの対話型セッションを開始する。システムデバイスはさらに、プレイヤーによって操作されるゲームコントローラ2142(
図21)もしくは2103、及び/またはHMD2205の初期位置及び向きを判定する。ゲームコンソール2200は、プレイヤーとレガシーゲームNとの間の双方向性に基づいてゲームの現在の状態を判定する。システムデバイスは、レガシーゲームNとのプレイヤーの対話型セッション中に、ゲームコントローラ2142もしくは2203及び/またはHMD2205の位置及び向きを追跡する。システムデバイスは、レガシーゲームNの現在の状態、ならびにゲームコントローラ2142もしくは2203及び/またはHMD2205の追跡された位置及び方向に基づいて、インタラクティブセッションの観客ビデオストリームを生成する。いくつかの実施形態では、HHCは、観客ビデオストリームをHHCのディスプレイ画面上にレンダリングする。様々な実施形態において、HMD2205はHMD2205のディスプレイ画面上に観客ビデオストリームをレンダリングする。
【0294】
図23を参照すると、HMD2302の構成要素を示す図が示されている。HMD2302は、HMD2205(
図22)の例である。HMD2302は、プログラム命令を実行するためのプロセッサ2300を含む。メモリデバイス2302は、記憶目的のために提供されている。メモリデバイス2302の例には、揮発性メモリ、不揮発性メモリ、またはそれらの組み合わせが含まれる。例えば、プレイヤーが見る保存データなどから生成された画像フレームの表示などの視覚的インターフェースを提供するディスプレイデバイス2304が含まれている。電池2306は、HMD2302の電源として提供されている。モーション検出モジュール2308は、磁力計2310、加速度計2312、及びジャイロスコープ2314などの様々な種類のモーションセンシティブハードウェアのいずれかを含む。
【0295】
加速度計は、加速度と重力によって引き起こされる反力を測定するためのデバイスである。単軸及び多軸モデルは、異なる方向における加速度の大きさ及び方向を検出するために利用可能である。加速度計は、傾き、バイブレーション、衝撃を感知するために使用される。一実施形態では、3つの加速度計2312は、重力の方向を提供するために使用され、この方向は、2つの角度、例えば、ワールド空間ピッチ及びワールド空間ロールなどの絶対基準を与える。
【0296】
磁力計は、HMD2302の近傍の磁場の強度と方向を測定する。いくつかの実施形態では、3つの磁力計2310が、HMD2302内で使用され、ワールド空間のヨー角の絶対基準を確実にする。様々な実施形態において、磁力計は、±80マイクロテスラである地球磁場にまたがるように設計されている。磁力計は金属により影響を受け、実際のヨーと単調なヨー測定値を提供する。いくつかの実施形態では、磁場は、実世界の環境において金属のために歪められ、これは、ヨー測定において歪みを引き起こす。様々な実施形態において、この歪みは、例えば、ジャイロスコープ2314、カメラ2316などの他のセンサからの情報を使用して較正される。一実施形態では、加速度計2312は、磁力計2310と共に使用されて、HMD2302の傾斜及び方位角を取得する。
【0297】
ジャイロスコープは、角運動量の原理に基づいて、向きを測定または維持するためのデバイスである。一実施形態では、ジャイロスコープ2314の代わりに、3つのジャイロスコープが、慣性感知に基づいて、それぞれの軸(x、y、及びz)を横切る動きに関する情報を提供する。ジャイロスコープは、高速回転の検出に役立つ。しかしながら、ジャイロスコープは、いくつかの実施形態では、絶対基準が存在しないと、時間の経過と共にドリフトする。このことが、ジャイロスコープを周期的にリセットし、これは、オブジェクト、加速度計、磁力計などの視覚的な追跡に基づいた位置/方向の判定など、他の利用可能な情報を使用して実行され得る。
【0298】
カメラ2316は、例えば、部屋、キャビン、自然環境など、プレイヤーを取り巻く実世界環境の画像及び画像ストリームをキャプチャするために提供される。様々な実施形態において、複数のカメラが、HMD2302に含まれており、複数のカメラは、例えば、プレイヤーがHMD2302などのディスプレイを見ているときに、プレイヤーから離れる方向に向けられた後ろ向きのカメラ、及び例えば、プレイヤーがHMD2302のディスプレイを見ているときにプレイヤーに向けられる、正面向きのカメラを含んでいる。さらに、いくつかの実施形態では、深度カメラ2318は、実世界環境内のオブジェクトの深度情報を感知するためにHMD2302に含まれている。
【0299】
HMD2302は、オーディオ出力を提供するためのスピーカー2320を含む。また、いくつかの実施形態では、周囲環境からのサウンドを含む実世界環境からのオーディオ、及びプレイヤーによって行われたスピーチ、などをキャプチャするために、マイクロフォン2322が含まれている。HMD2302は、触覚フィードバックをプレイヤーに提供するための、例えば、バイブレーションデバイスなどの触覚フィードバックモジュール2324を含む。一実施形態では、触覚フィードバックモジュール2324は、HMD2302の動き及び/またはバイブレーションを起こして、プレイヤーに触覚フィードバックを提供することができる。
【0300】
LED2326は、HMD2302のステータスの視覚的インジケータとして提供されている。例えば、LEDは、バッテリレベル、電源オンなどを示し得る。カードリーダ2328は、HMD2302がメモリカードに情報を書き込み、そこから情報を読み取ることを可能にするために提供される。USBインターフェース2330は、周辺デバイスの接続、または他の携帯デバイス、コンピュータなどの他のデバイスへの接続を可能にするためのインターフェースの一例として含まれている。HMD2302の様々な実施形態では、HMD2302のより大きな接続性を可能にするために、様々な種類のインターフェースのいずれかが含まれ得る。
【0301】
Wi-Fi(商標)モジュール2332は、無線ネットワーク技術を介したインターネットへの接続を可能にするために含まれている。また、HMD2302は、他のデバイスへのワイヤレス接続を可能にするBluetooth(登録商標)モジュール2334を含む。いくつかの実施形態では、他のデバイスに接続するための通信リンク2336も含まれている。一実施形態では、通信リンク2336は、無線通信のために赤外線送信を利用する。他の実施形態では、通信リンク2336は、他のデバイスとの通信のための様々な無線または有線伝送プロトコルのいずれかを利用する。
【0302】
入力ボタン/センサ2338は、プレイヤーに入力インターフェースを提供するために含まれている。ボタン、タッチパッド、ジョイスティック、トラックボールなど、様々な種類の入力インターフェースが含まれている。様々な実施形態において、超音波通信モジュール2340が、超音波技術を介して他のデバイスとの通信を容易にするためにHMD2302に含まれている。
【0303】
プレイヤーからの生理学的データの検出を可能にするために、生体センサ2342が含まれている。一実施形態では、バイオセンサー2342は、プレイヤーの皮膚を通して、プレイヤーの生体電気信号を検出するための1つ以上の乾式電極を含む。
【0304】
HMD2302の前述の構成要素は、HMD2302に含まれ得る単なる例示的な構成要素として説明されてきた。様々な実施形態において、HMD2302は、様々な前述の構成要素のいくつかを含むか、または含まない。
【0305】
図24は、情報サービスプロバイダ(INSP)アーキテクチャの実施形態を示している。INSP2402は、地理的に分散し、例えば、LAN、WAN、またはそれらの組み合わせなどのコンピュータネットワーク2406を介して接続されたプレイヤーに多数の情報サービスを提供する。コンピュータネットワーク2406は、コンピュータネットワーク2120(
図21)の例である。WANの例は、インターネットを含み、LANの例は、イントラネットを含む。ユーザ1は、クライアントデバイス2420-1を操作し、ユーザ2は、別のクライアントデバイス2420-2を操作し、ユーザ3は、さらに別のクライアントデバイス2420-3を操作する。
【0306】
いくつかの実施形態では、各クライアントデバイス2420-1、2420-2、及び2420-3は、中央処理装置(CPU)、ディスプレイ、及び入出力(I/O)インターフェースを含む。各クライアントデバイス2420-1、2420-2、及び2420-3の例には、パーソナルコンピュータ(PC)、携帯電話、ネットブック、タブレット、ゲームシステム、携帯情報端末(PDA)、ゲームコンソール2200とディスプレイデバイスの組み合わせ、HMD2302(
図23)、ゲームコンソール2200とHMD2302の、デスクトップコンピュータ、ラップトップコンピュータ、及びスマートテレビ、等が含まれる。クライアントデバイス2420-1、2420-2、及び2420-3の各々の他の例は、上記に提供されている。いくつかの実施形態では、INSP2402は、クライアントデバイスのタイプを認識し、使用される通信方法を調整する。
【0307】
いくつかの実施形態では、INSP2402は、株価更新などの1つのタイプのサービス、または放送メディア、ニュース、スポーツ、ゲームなどのような様々なサービスを提供する。さらに、各INSPによって提供されるサービスは動的であり、つまり、サービスはどの時点でも追加または削除できる。したがって、特定の個人に特定のタイプのサービスを提供するINSPは、時間の経過とともに変化することがある。例えば、クライアントデバイス2420-1は、クライアントデバイス2420-1に近いINSPによってサービス提供され、クライアントデバイス2420-1は、ユーザ1の地元にあり、クライアントデバイス2420-1は、ユーザ1が別の都市に移動するときに、異なるINSPによってサービス提供される。地元のINSPは、要求された情報とデータを新しいINSPに転送し、情報が、新しい都市へとクライアントデバイス2420-1を「追従」し、データをクライアントデバイス2420-1に近づけてアクセスしやすくする。様々な実施形態では、マスターとサーバの関係は、クライアントデバイス2420-1の情報を管理するマスターINSPと、マスターINSPからの制御下でクライアントデバイス2420-1と直接インターフェースするサーバINSPとの間に確立される。いくつかの実施形態では、クライアントデバイス2420-1が世界中を移動すると、INSPをより良い位置に置いて、クライアントデバイス2420-1にサービス提供して、これらのサービスを提供するものにするために、データは1つのISPから別のISPに転送される。
【0308】
INSP2402は、コンピュータネットワーク2406を介して顧客にコンピュータベースのサービスを提供するアプリケーションサービスプロバイダ(ASP)2408を含む。ASPモデルを使用して提供されるソフトウェアは、オンデマンドソフトウェアまたはsoftware as a service(SaaS)とも称されることもある。例えば、顧客関係管理などのコンピュータベースのサービスへのアクセスを提供する簡単な形式は、例えば、ハイパーテキスト転送プロトコル(HTTP)などの標準プロトコルを使用することによる。アプリケーションソフトウェアは、ベンダーのサーバ上にあり、ベンダー、及び/またはシンクライアントなどの他のリモートインターフェースによって提供されている専用クライアントソフトウェアによって、ハイパーテキストマークアップ言語(HTML)などを使用したウェブブラウザを介して各クライアントデバイス2420-1、2420-2、及び2420-3によってアクセスされる。
【0309】
広い地理的領域で提供されるサービスは、多くの場合、クラウドコンピューティングを使用する。クラウドコンピューティングは、動的にスケーラブルで、多くの場合、仮想化されたリソースがコンピュータネットワーク2406を介してサービスとして提供されるコンピューティングのスタイルである。ユーザ1から3は、それらをサポートする「クラウド」のテクノロジインフラストラクチャの専門家である必要はない。いくつかの実施形態では、クラウドコンピューティングは、Infrastructure as a Service(IaaS)、Platform as a Service(PaaS)、及びSoftware as a Service(SaaS)などの異なるサービスに分割される。クラウドコンピューティングサービスは、多くの場合、ウェブブラウザからアクセスされる一般的なビジネスアプリケーションをオンラインで提供し、一方で、ソフトウェア及びデータはサーバに格納されている。クラウドという用語は、コンピュータネットワーク2406が、どのようにコンピュータネットワーク図に描かれているか、かつ、秘匿する複雑なインフラストラクチャの抽象化であるかに基づいて、例えば、サーバ、ストレージ、ロジックなどを使用して、コンピュータネットワーク2406のメタファーとして使用される。
【0310】
さらに、INSP2402にはゲーム処理プロバイダ(GPP)2410が含まれており、これは、本明細書では、レガシーゲームNなどの、シングルプレイヤー及びマルチプレイヤービデオゲームをプレイするためにクライアントデバイス2420-1、2420-2、及び2420-3によって使用されるゲーム処理サーバと呼ばれることもある。コンピュータネットワーク2406上でプレイされるほとんどのビデオゲームは、ゲームサーバへの接続を介して操作する。通常、ゲームは、クライアントデバイス2420-1、2420-2、及び2420-3からデータを収集し、それらを他のユーザによって操作されている他のクライアントに分配する専用のサーバアプリケーションを使用する。これはピアツーピアの配置よりも効率的で効果的であるが、別のサーバが、サーバアプリケーションをホストするために使用される。いくつかの実施形態では、GPP2410は、クライアントデバイス2420-1、2420-2、及び2420-3間の通信を確立し、集中型GPP2410にさらに依存することなく、情報を交換する。
【0311】
専用のGPPは、クライアントとは独立して実行されるサーバである。このようなサーバは、通常、データセンタに配置された専用ハードウェア上で実行し、より多くの帯域幅及び専用処理能力を提供する。専用サーバは、ほとんどのPCベースのマルチプレイヤーゲームのためのゲームサーバをホストする方法である。大規模なマルチプレイヤーオンラインゲームは、通常、ゲームタイトルを所有しているソフトウェア会社がホストする専用サーバで実行され、コンテンツの制御及び更新をできるようにする。
【0312】
ブロードキャスト処理サーバ(BPS)2412は、本明細書ではブロードキャスト処理プロバイダとも呼ばれ、オーディオまたはビデオ信号を視聴者に配信する。非常に狭い範囲の視聴者へのブロードキャストは、ナローキャスティングと呼ばれることがある。ブロードキャスト配信の最終レッグは、信号がクライアントデバイス2420-1、2420-2、及び2420-3に到達する方法であり、いくつかの実施形態では、ラジオ局やテレビ局からアンテナ及び受信器に放送で配信されるか、またはケーブルテレビまたはケーブルラジオまたはステーションを介した「無線ケーブル」を通じて配信される。コンピュータネットワーク2406はまた、様々な実施形態において、ラジオ信号またはテレビ信号のいずれかをクライアントデバイス2420-1、2420-2、及び2420-3に持ち込み、特に、マルチキャスティングで信号や帯域幅が共有されることを可能にする。歴史的に、ブロードキャストは、いくつかの実施形態では、例えば全国放送、地域放送など、地理的領域によって区切られている。しかしながら、高速インターネットの急増により、コンテンツは世界のほぼすべての国に到達できるため、ブロードキャストは地域によって定義されていない。
【0313】
ストレージサービスプロバイダ(SSP)2414は、コンピュータストレージスペースと関連管理サービスを提供する。SSP2414はまた、周期的なバックアップとアーカイブも提供する。ストレージをサービスとして提供することにより、クライアントデバイス2420-1、2420-2、及び2420-3は、ストレージがサービスとして使用されていないときと比較して、より多くのストレージを使用する。別の大きな利点は、SSP2414が、バックアップサービスを含み、クライアントデバイス2420-1、2420-2、及び2420-3は、ハードドライブが故障した場合でもデータを損失しない。さらに、いくつかの実施形態では、複数のSSPは、クライアントデバイス2420-1、2420-2、及び2420-3から受信したデータの全体的または部分的なコピーを有し、クライアントデバイス2420-1、2420-2、及び2420-3が配置されている場所や、クライアントのタイプに関係なく、クライアントデバイス2420-1、2420-2、及び2420-3が効率的な方法でデータにアクセスすることを可能にする。例えば、プレイヤーは、自宅のコンピュータを介して、かつ、プレイヤーの移動中は携帯電話を介して個人ファイルにアクセスする。
【0314】
通信プロバイダ2416は、クライアントデバイス2420-1、2420-2、及び2420-3への接続を提供する。通信プロバイダ2416の一種は、コンピュータネットワーク2406へのアクセスを提供するインターネットサービスプロバイダ(ISP)である。ISPは、ダイヤルアップ、デジタル加入者線(DSL)、ケーブルモデム、ファイバ、ワイヤレスまたは専用の高速相互接続などのインターネットプロトコルデータグラムを送達するために適切なデータ転送技術を使用して、クライアントデバイス2420-1、2420-2、及び2420-3を接続する。通信プロバイダ2416はまた、いくつかの実施形態では、電子メール、インスタントメッセージング、及びショートメッセージサービス(SMS)テキストメッセージなどのメッセージングサービスを提供する。別のタイプの通信プロバイダは、ネットワークサービスプロバイダ(NSP)であり、これは、コンピュータネットワーク2406への直接バックボーンアクセスを提供することによって、帯域幅またはネットワークアクセスを販売する。ネットワークサービスプロバイダの例には、電気通信会社、データキャリア、ワイヤレス通信プロバイダ、インターネットサービスプロバイダ、高速インターネットアクセスを提供するケーブルテレビ事業者などが含まれる。
【0315】
データ交換2418は、INSP602内のいくつかのモジュールを相互接続し、これらのモジュールを、コンピュータネットワーク2406を介してクライアントデバイス2420-1、2420-2、及び2420-3に接続する。データ交換2418は、様々な実施形態において、INSP2402のすべてのモジュールが近接している小さな領域をカバーするか、または異なるモジュールが地理的に分散しているときに、広い地理的領域をカバーする。例えば、データ交換2402には、データセンタのキャビネット内の高速ギガビットイーサネット(登録商標)または大陸間仮想LANが含まれる。
【0316】
いくつかの実施形態では、サーバシステム404(
図4A)とクライアントデバイス2420-1~2420-3との間の通信は、無線技術を使用して促進され得る。そのような技術には、例えば、5G無線通信技術が含まれ得る。
【0317】
一実施形態では、本明細書で説明するレガシーゲームNなどのビデオゲームは、ゲーム機、パーソナルコンピュータのいずれかでローカルに実行されるか、またはサーバ上で実行される。場合によっては、ビデオゲームは、データセンタの1つ以上のサーバによって実行される。ビデオゲームが実行されるとき、ビデオゲームのいくつかのインスタンスは、ビデオゲームのシミュレーションであり得る。例えば、ビデオゲームは、ビデオゲームのシミュレーションを生成する環境またはサーバによって実行され得る。いくつかの実施形態では、シミュレーションは、ビデオゲームのインスタンスである。他の実施形態では、シミュレーションは、エミュレータによって生成され得る。いずれの場合も、ビデオゲームがシミュレーションとして表される場合、そのシミュレーションは、ユーザ入力によってインタラクティブにストリーミング、実行、及び/または制御されることができるインタラクティブコンテンツをレンダリングするために実行されることが可能である。
【0318】
様々な実施形態において、本明細書に記載されるいくつかの実施形態の1つ以上の特徴は、本明細書に記載される残りの実施形態の1つ以上の1つ以上の特徴と組み合わされることに留意されたい。
【0319】
本開示に記載の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、小型コンピュータ、メインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施されてよい。一実施態様では、本開示に記載の実施形態は、有線または無線ネットワークを通してリンクされたリモート処理デバイスによってタスクが行われる分散コンピューティング環境で実践される。
【0320】
前述の実施形態を念頭に置いて、一実施態様では、本開示に記載の実施形態は、コンピュータシステムに記憶されたデータを伴う様々なコンピュータ実施動作を採用することを理解されたい。これらの動作は、物理量の物理的操作を要する動作である。本開示に記載の実施形態の一部を形成する本明細書で説明される動作のうちのいずれも、有用な機械動作である。本開示に記載のいくつかの実施形態はまた、これらの動作を行うためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築される、または装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータである。具体的には、一実施形態において、様々な汎用マシンは、本明細書の教示に従って書かれたコンピュータプログラムと共に使用される、または、必要な動作を行うためにさらに特化した装置を構築するほうがより好都合な場合がある。
【0321】
ある実施態様では、本開示に記載のいくつかの実施形態は、コンピュータ可読媒体上のコンピュータ可読コードとして具体化される。コンピュータ可読媒体は、データを格納することができる任意のデータ格納装置であり、これは、その後、コンピュータシステムによって読み取られることができる。コンピュータ可読媒体の例には、ハードドライブ、ネットワーク接続ストレージ(NAS)、ROM、RAM、CD-ROM、CD-recordable(CD-R)、CD-recordable(CD-RW))、磁気テープ、光学データ記憶装置、非光学データ記憶装置などが含まれる。一例として、コンピュータ可読媒体は、ネットワーク結合コンピュータシステム上に分散されたコンピュータ可読有形媒体を含み、コンピュータ可読コードが分散方式で格納及び実行されるようになっている。
【0322】
さらに、上述の実施形態のいくつかは、ゲーム環境に関して説明されているが、いくつかの実施形態では、ゲームの代わりに、例えば、ビデオ会議環境などの他の環境が使用される。
【0323】
本方法の操作は特定の順序で説明されているが、他のハウスキーピング操作が、操作の間に実行され得、もしくは、操作が、わずかに異なる時間に発生するように調整されることができるか、またはシステムに分散されることができ、このことが、重複操作の処理が所望の方法で実行される限り、処理に関連する様々な間隔での処理操作の発生を可能とすることが理解されるべきである。
【0324】
本開示に記載の前述の実施形態は、理解を明確にするためにある程度詳細に説明したが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。従って、本実施形態は、限定ではなく例示としてみなされるべきであり、本実施形態は、本明細書に記載される詳細に限定されるべきではなく、添付の請求項の範囲及び均等物の中で変更されてよい。
【国際調査報告】