以下、この発明の一実施例について、図面を参照しながら詳細に説明するが、最初に、先述した特許文献1(特許第4255510号公報)との関係を説明しておく。この実施例は、特許文献1の実施例に記載の拡張操作装置(ジャイロセンサユニット)が備えるデバイスと同等のデバイス(ジャイロセンサ)を入力装置(第1コントローラ)に内蔵したものである。したがって、この実施例の入力装置(第1コントローラ)は、特許文献1のジャイロセンサユニット付き第1コントローラと同等の機能を有する。この実施例の第2コントローラおよび情報処理装置(ゲーム装置)は、特許文献1のものと同じ構成を有し、かつ同様の動作を行う。この実施例に登場するジャイロセンサユニットもまた、特許文献1のものと同等であり、以下では特許文献1記載のジャイロセンサユニットと同じものが誤ってさらに接続された場合について説明する。なお、これらは一実施例に過ぎず、本発明は特許文献1記載のデバイスと同じもの以外にも適用できることは言うまでもない。すなわち特許文献1記載のデバイスに限らず、従来の外部拡張デバイスが存在する前提において当該デバイスと同等の機能を内蔵する入力装置を新たに提供する際には本発明が適用可能である。
この実施例の第1コントローラは、ジャイロセンサを内蔵しているので、さらにジャイロセンサユニットを接続する必要性はないが、コネクタ形状が共通であるため、誤って接続される可能性がある。しかし、この実施例の第1コントローラにジャイロセンサが誤って接続されても、第1コントローラのマイコン制御によって同等デバイス間のデータ競合が回避され、第1コントローラは正常に機能する。第1コントローラにジャイロセンサユニットを介して第2コントローラが接続された場合にも、各コントローラは問題なく動作し、ゲーム装置は、各コントローラからのデータに基づいてゲーム処理を実行することができる。
つまり、この実施例の第1コントローラは、ジャイロセンサを内蔵しながら、そのマイコン制御によって、特許文献1に記載されているような従来の第1コントローラとの間で、第2コントローラといった従来の拡張デバイスに対する互換性を保っている点に特徴がある。
第1コントローラ34の内部構成は、図3に示されている。コントローラ14全体の電気的構成は、第1コントローラ34および第2コントローラ36の間にジャイロセンサユニット100が介在しない場合およびする場合に場合分けして、図13および図14に示されている。すなわち、図14は誤ってジャイロセンサユニット100が接続されてしまっている状態である。第1コントローラ34の要部(ジャイロ制御部85C)の構成は図15に、ジャイロセンサユニット100の要部(ジャイロ制御部104C)の構成は図16に示されている。
第1コントローラ用のデータフォーマットは、図18(A)に示されている。第1コントローラでモード制御に利用されるアクセスデータの構造は、図18(B)に示されている。第1コントローラ34でのモード制御およびモード遷移は、図19(A)および図19(B)に示されている。なお、これらのモード制御およびモード遷移は、ジャイロセンサユニット100が従来の第1コントローラに接続された場合に行うものと同様である。ジャイロセンサユニット100が第1コントローラ34に接続された場合に行うモード制御およびモード遷移は、図20(A)および図20(B)に示されている。なお、これらのモード制御およびモード遷移では、ジャイロモードおよびジャイロ&第2コントローラモードは、スタンバイモードおよびバイパスモードと同等(これらに吸収された状態)になる。そして、第1コントローラ34のマイコン制御は、図21〜図24に示されている。
さて、図1を参照して、この発明の一実施例であるゲームシステム10は、ゲーム装置12およびコントローラ14を含む。ゲーム装置12は据置型ゲーム装置である。コントローラ14は、ユーザないしプレイヤの入力装置ないし操作装置である。ゲーム装置12とコントローラ14とは無線によって接続される。
ゲーム装置12は、略直方体のハウジング16を含み、ハウジング16の前面にはディスクスロット18およびメモリカードスロットカバー20が設けられる。ディスクスロット18から、ゲームプログラムおよびデータを記憶した情報記憶媒体の一例である光ディスク66(図11)が挿入されて、ハウジング16内のディスクドライブ54(図11)に装着される。メモリカードスロットカバー20の内側には外部メモリカード用コネクタ62(図11)が設けられており、外部メモリカード(図示せず)が挿入される。外部メモリカードは、光ディスク66(図11)から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイされたゲームのゲームデータ(結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。また、上記ゲームデータの保存は、外部メモリカードに代えて、たとえばフラッシュメモリ等の内部メモリに対して行うようにしてもよい。
ゲーム装置12のハウジング16の後面には、AVケーブルコネクタ(図示せず)が設けられ、当該コネクタを用いて、ゲーム装置12はAVケーブル28を介してモニタ(ディスプレイ)30に接続される。このモニタ30は典型的にはカラーテレビジョン受像機であり、AVケーブル28は、ゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ(モニタ)30の画面上にたとえば3Dビデオゲームのゲーム画像が表示され、内蔵されるスピーカ32からゲーム音楽や効果音などのステレオゲーム音声が出力される。
また、モニタ30の周辺(この実施例では、モニタ30の上側)には、2つの赤外LED(マーカ)22aおよび22bを備えるマーカ部22が設けられる。マーカ22aおよび22bは、それぞれモニタ30の前方に向けて赤外光を出力する。
なお、ゲーム装置12の電源は、一般的なACアダプタ(図示せず)によって与えられる。ACアダプタは家庭用の標準的な壁ソケットに接続され、家庭用電源を、ゲーム装置12を駆動するのに適した低いDC電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。マーカ部22は、図示しない電源線を通してゲーム装置12に接続されており、ゲーム装置12から電源の供給を受ける。
コントローラ14は、詳細は後述されるが、それぞれが片手で把持可能な第1コントローラ34および第2コントローラ36と、第1コントローラ34に装着されるジャイロセンサユニット100とを含む。第1コントローラ34の後端面にはコネクタ42(図2(A),図3,図13および図14)が設けられ、第2コントローラ36の後端から延びるケーブル38の先端にはコネクタ40(図5,図6,図13および図14)が設けられ、そしてジャイロセンサユニット100の先端面および後端面にはコネクタ106および108(図7(A),図7(B),図8,図13および図14)がそれぞれ設けられる。ジャイロセンサユニット100の先端面側のコネクタ106は第1コントローラ34のコネクタ42と接続可能であり、第2コントローラ36のコネクタ40は第1コントローラ34のコネクタ42またはジャイロセンサユニット100の後端面側のコネクタ108と接続可能である。
なお、ゲームをするためにはジャイロセンサユニット100は不要であって、第2コントローラ36はジャイロセンサユニット100を介さずに直接第1コントローラ34に接続されて使用されることが好ましいが、本実施例においては、誤ってジャイロセンサユニット100が接続されてしまった場合について説明をするために、ジャイロセンサユニット100が接続されている。
コネクタ106をコネクタ42に接続することで、ジャイロセンサユニット100は、第1コントローラ34と物理的および電気的に結合される。ただし、こうして第1コントローラ34に装着(一体化)されたジャイロセンサユニット100からは、第1コントローラ34の角速度を示す角速度データが出力されることはない(詳細は後述)。特許文献1に記載のような従来の第1コントローラに装着された場合には、角速度データが出力される。
こうして第1コントローラ34にジャイロセンサユニット100が装着された場合、第2コントローラ36のコネクタ40は、ジャイロセンサユニット100の後端面側のコネクタ108に接続される。すなわち、コネクタ42は、コネクタ106とコネクタ40の両者を選択的に接続可能な構造であって、コネクタ40は、コネクタ42とコネクタ108の両者に選択的に接続可能な構造である。したがって、ジャイロセンサユニット100に設けられるコネクタ106とコネクタ108とは、同一のハウジングに設けられるため実際は接続できないが、コネクタの形状としては互いに接続可能な形状をしていることになる。第2コントローラ36の入力データは、ケーブル38およびジャイロセンサユニット100を介して第1コントローラ34に与えられる。第1コントローラ34は、第1コントローラ34自身の入力データと、第2コントローラ36の入力データとを含むコントローラデータをゲーム装置12に送信する。第1コントローラ34の入力データには、第1コントローラ34自身に内蔵されたジャイロセンサ85(図3,図13〜図15)からの角速度データが含まれる(詳細は後述)。
なお、コネクタ40をコネクタ42に接続した場合には、第2コントローラ36の操作データないし入力データはケーブル38を介して第1コントローラ34に与えられ、第1コントローラ34は、第1コントローラ34自身の入力データと第2コントローラ36の入力データとを含むコントローラデータをゲーム装置12に送信する。
このとき、第1コントローラ34の入力データと、第2コントローラ36の入力データを送信するシステムにおいて、一度に送信するデータ量を追加することができないように設計されている場合もあるが、第1コントローラ34のマイコン94は、ジャイロセンサ85からの角速度データと、第2コントローラ36からの入力データとを交互に無線モジュール76へ出力することによって、両者のデータを送信することができる。
なお、ジャイロセンサユニット100においても、従来の第1コントローラに接続された場合には、上記のようなデータ制御(交互出力)が行われる。
このゲームシステム10において、ゲーム(または他のアプリケーション)をプレイするために、ユーザはまずゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくは実行したいと思う他のアプリケーション)を記憶している適宜の光ディスク66を選択し、その光ディスク66をゲーム装置12のディスクスロット18からディスクドライブ54にローディングする。これに応じて、ゲーム装置12がその光ディスク66に記憶されているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置12に入力を与えるためにコントローラ14を操作する。
図2には第1コントローラ34の外観の一例が示される。図2(A)は、第1コントローラ34を上面後方から見た斜視図であり、図2(B)は、第1コントローラ34を下面前方から見た斜視図である。
第1コントローラ34は、たとえばプラスチック成型によって形成されたハウジング78を有している。ハウジング78は、その前後方向(Z軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。一例として、ハウジング78は人間の掌とほぼ同じ長さまたは幅を持つ大きさをしている。プレイヤは、第1コントローラ34を用いて、それに設けられたボタンを押下することと、第1コントローラ34自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
ハウジング78には、複数の操作ボタンが設けられる。すなわち、ハウジング78の上面には、十字キー80a、Xボタン80b、Yボタン80c、Aボタン80d、セレクトスイッチ80e、メニュースイッチ80f、およびスタートスイッチ80gが設けられる。一方、ハウジング78の下面には凹部が形成されており、当該凹部の後方側傾斜面にはBボタン80hが設けられる。これら各ボタン(スイッチ)80a−80hには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。また、ハウジング78の上面には、遠隔からゲーム装置12本体の電源をオン/オフするための電源スイッチ80iが設けられる。第1コントローラ34に設けられる各ボタン(スイッチ)は、包括的に参照符号80を用いて示されることもある。
ハウジング78の前面には光入射口78bが形成され、ハウジング78内には撮像情報演算部81がさらに設けられる。撮像情報演算部81は、赤外線を撮像するカメラと撮像対象の画像内での座標を算出する演算部とによって構成され、上述のマーカ22aおよび22bを含む被写界を赤外線で捉えて、マーカ22aおよび22bの被写界内における位置座標を算出する。
また、ハウジング78の後面には、上述のコネクタ42が設けられている。コネクタ42は、第1コントローラ34に他の機器を接続するために利用される。この実施例では、コネクタ42には第2コントローラ36のコネクタ40またはジャイロセンサユニット100のコネクタ106が接続される。
ハウジング78の後面にはまた、コネクタ42を左右(X軸方向)に挟んで対向する位置に、一対の孔82aおよび82bが形成されている。この一対の孔82aおよび82bは、ジャイロセンサユニット100をハウジング78の後面に固定するためのフック112Faおよび112Fb(図7(A))が挿入される。ハウジング78の後面にはさらに、ストラップ24(図6)を装着するための孔82cも形成されている。
ハウジング78の上面を取り外すと、図3に示すような基板34Bが露見する。すなわち、第1コントローラ34は、ハウジング78内に基板34Bを含み、この基板34Bの長手方向の一方端部に、先に説明したコネクタ42が取り付けられる。この基板34Bの上主面上には、先に説明した十字キー80a,Xボタン80b,Yボタン80c,Aボタン80d,セレクトスイッチ80e,メニュースイッチ80f,およびスタートスイッチ80gが組み立てられる。
基板64の上主面上にはまた、十字キー80aとXボタン80bとの間であって、かつスタートスイッチ80gおよびセレクトスイッチ80eの間あたりに、先に説明した加速度センサ84が組み付けられ、さらに、加速度センサ84とXボタン80bとの間にジャイロセンサ85が、ジャイロセンサ85の幅方向右側には無線モジュール76が、それぞれ配置される。これら各種のボタン(スイッチ),センサおよびモジュールは、適宜の配線(図示せず)によってコントローラ回路を構成するマイコン94(図13)に各々接続される。
加速度センサ84は、X軸,Y軸およびZ軸の各々に沿う直線的な加速度を検出する3軸直線加速度計である。ジャイロセンサ85は、1軸のジャイロセンサ85aおよび2軸のジャイロセンサ85bの2チップで構成される。ジャイロセンサ85aはヨー角に関する角速度(Y軸周りの角速度)を検出するためのものであり、ジャイロセンサ85bはロール角およびピッチ角に関する2つの角速度(Z軸周りの角速度およびX軸周りの角速度)を検出するためのものである。ジャイロセンサ85aおよび85bは、基板34Bの上主面上に水平に並べて設けられる。なお、ジャイロセンサは1つの3軸センサであってもよいし、3つの1軸センサであってもよい。
なお、このようなジャイロセンサ85の配置の向き(軸方向)は、後に詳しく説明するジャイロセンサユニット100が接続されたときのジャイロセンサ104の向きと同じになるのが好ましい。配置される位置に関しては、ジャイロセンサは角速度を検出するもので、位置によっては検出する物理量は変わらないので、どこに配置されてもよく、たとえば反対側の基板に配置されていてもよい。
図4には第2コントローラ36の本体の外観の一例が示される。図4(A)は、第2コントローラ36を上面後方から見た斜視図であり、図4(B)は、第2コントローラ36を下面前方から見た斜視図である。なお、図4では、第2コントローラ36のケーブル38は省略されている。
第2コントローラ36は、たとえばプラスチック成型によって形成されたハウジング86を有している。ハウジング86は、平面視では、前後方向(Z軸方向)に略細長い楕円形状を有し、後端側の左右方向(X軸方向)の幅が先端側のそれよりも狭くされている。また、ハウジング86は、側面視では、全体として湾曲した形状を有しており、先端側の水平部分から後端側に向かって下がるように湾曲している。ハウジング86は、第1コントローラ34と同様に、全体として大人や子供の片手で把持可能な大きさであるが、長手方向(Z軸方向)の長さは、第1コントローラ34のハウジング78よりもやや短くされている。この第2コントローラ36でも、プレイヤは、ボタンやスティックを操作することと、コントローラ自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
ハウジング86の上面の先端側には、アナログジョイスティック88aが設けられる。ハウジング86の先端には、後方にやや傾斜する先端面が設けられており、この先端面には、上下方向(図4に示すY軸方向)に並べて、Cボタン88bおよびZボタン88cが設けられる。アナログジョイスティック88aおよび各ボタン88b,88cには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。第2コントローラ36に設けられるアナログジョイスティック88aおよび各ボタン88b,88cは、包括的に参照符号88を用いて示されることもある。
また、第2コントローラ36のハウジング86内には加速度センサ90(図3)が設けられている。この加速度センサ90としては、第1コントローラ34の加速度センサ84と同様の加速度センサが適用される。具体的には、この実施例では3軸加速度センサが適用され、第2コントローラ36の上下方向(Y軸方向)、左右方向(X軸方向)および前後方向(Z軸方向)の3軸方向のそれぞれで加速度を検知する。したがって、第1コントローラ34の場合と同様に、検出された加速度に適宜な演算処理を施すことによって、第2コントローラ36の傾きや回転、重力方向に対する加速度センサ90の姿勢などを算出することができる。また、振り等によって第1コントローラ34に加えられた動きについても同様に算出することができる。
図5には第2コントローラ36のコネクタ40の外観の一例が示される。図5は、コネクタ40を下面前方から見た斜視図である。なお、ここでもケーブル38は省略されている。コネクタ40は、たとえばプラスチック成型によって形成されたハウジング142を有する。ハウジング142の下面にはフック144が設けられている。このフック144は、本来的には、図6に示すように、コネクタ40を第1コントローラ34(のコネクタ42)と直に接続した場合に、第1コントローラ34に装着されたストラップ24のひもを掛け止めるためのものである。ストラップ24のひもをフック144に掛け止めることによって、コネクタがよりしっかり固定される。
図7にはジャイロセンサユニット100の外観の一例が示される。図7(A)は、ジャイロセンサユニット100を上面前方から見た斜視図であり、図7(B)は、ジャイロセンサユニット100を下面後方から見た斜視図である。
ジャイロセンサユニット100は、たとえばプラスチック成型によって形成されたハウジング110を有している。ハウジング110は、略直方体形状を有しており、その長さは第1コントローラ34のハウジング78の長さのおよそ1/5、その幅および厚みはハウジング78の幅および厚みとほぼ同じである。プレイヤは、第1コントローラ34にジャイロセンサユニット100を装着した状態でも、第1コントローラ34自体の位置や向きを変えることによって、ゲーム操作を行うことができる。
ハウジング110の前面および後面には上述のコネクタ106および108が、ハウジング110の両側面には一対のリリースボタン112aおよび112bが、そしてハウジング110の下面にはロックスイッチ114が、それぞれ設けられている。ハウジング110の前面下端から下面先端にかけては、第1コントローラ34にジャイロセンサユニット100を装着した状態でストラップ24用の孔82cが露見するように(図9)、略球面状の凹部110aが設けられている。
ハウジング110の前面にはまた、コネクタ106を挟んで横方向(X軸方向)に対向する位置に、一対のリリースボタン112aおよび112bとそれぞれ連繋する一対のフック112Faおよび112Fbが設けられている。ジャイロセンサユニット100を第1コントローラ34に装着するべく、コネクタ106をコネクタ42に接続すると、一対のフック112Faおよび112Fbはハウジング78後面の一対の孔82aおよび82b(図2(A))に挿入され、フック112Faおよび112Fbの爪がハウジング78の内壁に引っ掛かる。これによって、ジャイロセンサユニット100は、第1コントローラ34の後面に固定される。
こうして第1コントローラ34に装着されたジャイロセンサユニット100が図9に示される。この状態で一対のリリースボタン112aおよび112bを押せば、爪の引っ掛かりは解け、ジャイロセンサユニット100を第1コントローラ34から取り外せるようになる。
ロックスイッチ114は、このようなリリースボタン112aおよび112bにロックをかけるためのスライドスイッチである。リリースボタン112aおよび112bは、ロックスイッチ114が第1位置(たとえば後ろ寄り)にあるとき押下不能(ロック状態)であり、ロックスイッチ114が第2位置(たとえば前寄り)にあるとき押下可能(解除状態)である。ハウジング110内には、ロックバネ118aおよび118b(図8)が設けられ、リリースボタン112aおよび112bを押下すると反発するように構成され、押下されていないときは爪が引っ掛かった状態を維持するように構成されている。このため、ジャイロセンサユニット100を取り外すには、ユーザは、ロックスイッチ114を第1位置から第2位置にスライドさせたうえで、リリースボタン112aおよび112bを押す必要がある。
ハウジング110の後面にはまた、コネクタ108に装着されるコネクタカバー116を収納可能な凹部110bが、このコネクタ108の周囲に形成される。コネクタカバー116は、その主面の一方端部に、前後(Z軸方向)に長細い薄手の(すなわち曲折容易な)突起116aを有する。この突起116aの先端部分がハウジング110と係合されており、コネクタカバー116は、コネクタ108から取り外された状態でもハウジング110に係留される。
コネクタカバー116はまた、その主面の他方端部に、左右(X軸方向)に長細い厚手の(すなわち曲折困難な)突起116bを有する。突起116bの厚み(Z軸方向の高さ)は、第2コントローラ36のコネクタ40に設けられたフック144(図5)の厚み(Y軸方向の高さ)とほぼ同じである。第1コントローラ34にジャイロセンサユニット100を介して第2コントローラ36が接続された場合、コネクタカバー116は、図10に示すように、その主面が水平となって、突起116bがフック144の側面と係合される。
図8にはジャイロセンサユニット100の構成の一例が示される。ジャイロセンサユニット100は、上述したハウジング110、コネクタ106および108、リリースボタン112aおよび112b、フック112Faおよび112Fb、ロックスイッチ114、コネクタカバー116ならびにロックバネ118aおよび118bに加え、ジャイロ基板120および支持部材122を備える。ジャイロ基板120はコネクタ106および108の各々と信号線で接続され、支持部材122はジャイロ基板120ならびにコネクタ106および108を支持する。
ジャイロ基板120にはジャイロセンサ104が設けられる。ジャイロセンサ104は、1軸のジャイロセンサ104aおよび2軸のジャイロセンサ104bの2チップで構成される。ジャイロセンサ104aはヨー角に関する角速度(Y軸周りの角速度)を検出するためのものであり、ジャイロセンサ104bはロール角およびピッチ角に関する2つの角速度(Z軸周りの角速度およびX軸周りの角速度)を検出するためのものである。ジャイロセンサ104aおよび104bは、ジャイロ基板120の上面120aに水平に並べて設けられる。
なお、ジャイロセンサ104aおよび104bの配置は、図8に示されたものに限らない。他の実施例では、ジャイロセンサ104aは、ジャイロ基板120の上面120aおよび下面120bの一方に水平に設けられ、ジャイロセンサ104bは、ジャイロ基板120の上面120aおよび下面120bの他方に水平に、ジャイロ基板120を挟んでジャイロセンサ104aと対向するように設けられる。その他の実施例では、ジャイロセンサ104aはジャイロ基板120の上面120aおよび下面120bの一方に垂直に設けられ、ジャイロセンサ104bはジャイロ基板120の上面120aおよび下面120bの他方に水平に設けられる。
また、ジャイロセンサ104は、2チップ構成とは限らず、3個の1軸ジャイロセンサ(3チップ)で構成してもよく、1個の3軸ジャイロセンサ(1チップ)で構成してもよい。いずれの場合も、上述の3つの角速度を適正に検出できるように、各チップの位置や向きが決定される。さらにまた、場合によっては、ジャイロセンサ104は、1個の2軸ジャイロセンサで構成しても、2個または1個の1軸ジャイロセンサで構成してもよい。
そして、このような変形例は、第1コントローラ34に内蔵されたジャイロセンサ85にも適用されてよい。
なお、図2に示した第1コントローラ34、図4に示した第2コントローラ36、図5に示したコネクタ40、および図7に示したジャイロセンサユニット100の形状や、ボタン(スイッチまたはスティック等)の形状、数および設置位置等は単なる一例に過ぎず、他の形状、数および設置位置等に適宜変更され得る。
なお、センサは、好ましい実施例ではジャイロセンサ(角速度センサ)であるが、たとえば加速度センサ、速度センサ、変位センサ、回転角センサなど、他のモーションセンサでもよい。モーションセンサ以外にも、傾斜センサ、イメージセンサ、光センサ、圧力センサ、磁気センサ、温度センサなどがあり、いずれのセンサを追加する場合でも、センサの検出対象を利用した操作が可能となる。いずれのセンサを用いた場合でも、従来操作装置に接続されていた他の装置をそのまま使用しながら、操作装置に当該センサを追加することができる。
また、コントローラ14の電源は、第1コントローラ34内に取替可能に収容されるバッテリ(図示せず)によって与えられる。第2コントローラ36には、コネクタ40およびケーブル38を介してこの電源が供給される。第1コントローラ34にジャイロセンサユニット100が接続されている場合、ジャイロセンサユニット100にはコネクタ42および106を介してこの電源が供給される。さらにジャイロセンサユニット100に第2コントローラ36が接続されていれば、第1コントローラ34からジャイロセンサユニット100に供給された電源の一部は、コネクタ108、コネクタ40およびケーブル38を介して第2コントローラ36にも与えられる。
図11にはゲームシステム10の電気的な構成が示される。図示は省略するが、ハウジング16内の各コンポーネントは、プリント基板に実装される。図11に示すように、ゲーム装置12には、CPU44が設けられ、ゲームプロセッサとして機能する。また、CPU44には、システムLSI64が接続される。このシステムLSI64には、外部メインメモリ46、ROM/RTC48、ディスクドライブ54およびAV IC56が接続される。
外部メインメモリ46は、ゲームプログラム等のプログラムを記憶したり、各種データを記憶したりして、CPU44のワーク領域やバッファ領域として用いられる。ROM/RTC48は、いわゆるブートROMであり、ゲーム装置12の起動用のプログラムが組み込まれるとともに、時間をカウントする時計回路が設けられる。ディスクドライブ54は、光ディスク66からプログラムやテクスチャデータ等を読み出し、CPU44の制御の下で、後述する内部メインメモリ64eまたは外部メインメモリ46に書き込む。
システムLSI64には、入出力プロセッサ64a、GPU(Graphics Processor Unit)64b,DSP(Digital Signal Processor)64c,VRAM64dおよび内部メインメモリ42eが設けられ、図示は省略するが、これらは内部バスによって互いに接続される。
入出力プロセッサ(I/Oプロセッサ)42aは、データの送受信を実行したり、データのダウンロードを実行したりする。
GPU64は、描画手段の一部を形成し、CPU44からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従ってゲーム画像データを生成する。ただし、CPU40は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU64に与える。
図示は省略するが、上述したように、GPU64にはVRAM64dが接続される。GPU64が作画命令を実行するにあたって必要なデータ(画像データ:ポリゴンデータやテクスチャデータなどのデータ)は、GPU64がVRAM64dにアクセスして取得する。ただし、CPU44は、描画に必要な画像データを、GPU64を介してVRAM64dに書き込む。GPU64は、VRAM64dにアクセスして描画のためのゲーム画像データを作成する。
なお、この実施例では、GPU64がゲーム画像データを生成する場合について説明するが、ゲームアプリケーション以外の任意のアプリケーションを実行する場合には、GPU64は当該任意のアプリケーションについての画像データを生成する。
また、DSP64cは、オーディオプロセッサとして機能し、内部メインメモリ64eや外部メインメモリ46に記憶されるサウンドデータや音波形(音色)データを用いて、スピーカ32から出力する音、音声或いは音楽に対応するオーディオデータを生成する。
上述のように生成されたゲーム画像データおよびオーディオデータは、AV IC56によって読み出され、AVコネクタ58を介してモニタ30およびスピーカ32に出力される。したがって、ゲーム画面がモニタ30に表示され、ゲームに必要な音(音楽)がスピーカ32から出力される。
また、入出力プロセッサ64aには、フラッシュメモリ43、無線通信モジュール50および無線コントローラモジュール52が接続されるとともに、拡張コネクタ60およびメモリカード用コネクタ62が接続される。また、無線通信モジュール50にはアンテナ50aが接続され、無線コントローラモジュール52にはアンテナ52aが接続される。
入出力プロセッサ64aは、無線通信モジュール50を介して、ネットワーク(図示せず)に接続される他のゲーム装置や各種サーバと通信することができる。ただし、ネットワークを介さずに、直接的に他のゲーム装置と通信することもできる。入出力プロセッサ64aは、定期的にフラッシュメモリ43にアクセスし、ネットワークへ送信する必要があるデータ(「送信データ」とする)の有無を検出し、当該送信データが有る場合には、無線通信モジュール50およびアンテナ50aを介してネットワークに送信する。また、入出力プロセッサ64aは、他のゲーム装置から送信されるデータ(「受信データ」とする)を、ネットワーク、アンテナ50aおよび無線通信モジュール50を介して受信し、当該受信データをフラッシュメモリ43に記憶する。ただし、受信データが一定の条件を満たさない場合には、当該受信データはそのまま破棄される。さらに、入出力プロセッサ64aは、ダウンロードサーバ(図示せず)からダウンロードしたデータ(ダウンロードデータとする)をネットワーク、アンテナ50aおよび無線通信モジュール50を介して受信し、そのダウンロードデータをフラッシュメモリ43に記憶することもできる。
また、入出力プロセッサ64aは、コントローラ14から送信される入力データをアンテナ52aおよび無線コントローラモジュール52を介して受信し、内部メインメモリ64eまたは外部メインメモリ46のバッファ領域に記憶(一時記憶)する。入力データは、CPU44の処理(たとえば、ゲーム処理)によって利用された後、バッファ領域から消去される。
なお、この実施例では、上述したように、無線コントローラモジュール52は、Bluetooth規格に従ってコントローラ14との間で通信を行う。このため、コントローラ14からデータを取得するだけでなく、ゲーム装置12からコントローラ14に所定の命令を送信し、コントローラ14の動作をゲーム装置12から制御することもできる。
さらに、入出力プロセッサ64aには、拡張コネクタ60およびメモリカード用コネクタ62が接続される。拡張コネクタ60は、USBやSCSIのようなインタフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、コントローラ14とは異なる他のコントローラのような周辺機器を接続したりすることができる。また、拡張コネクタ60に有線LANアダプタを接続し、無線通信モジュール50に代えて当該有線LANを利用することもできる。メモリカード用コネクタ62には、メモリカード38のような外部記憶媒体を接続することができる。したがって、たとえば、入出力プロセッサ64aは、拡張コネクタ60やメモリカード用コネクタ62を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
詳細な説明は省略するが、図1にも示したように、ゲーム装置12(ハウジング16)には、電源ボタン20a,リセットボタン20bおよびイジェクトボタン20cが設けられる。電源ボタン20aは、システムLSI64に接続される。この電源ボタン20aがオンされると、システムLSI64には、ゲーム装置12の各コンポーネントに図示しないACアダプタを経て電源が供給され、通電状態となるモードが設定される。
リセットボタン20bもまた、システムLSI64に接続される。リセットボタン20bが押されると、システムLSI64は、ゲーム装置12の起動プログラムを再起動する。イジェクトボタン20cは、ディスクドライブ54に接続される。イジェクトボタン20cが押されると、ディスクドライブ54から光ディスク66が排出される。
図13には、第1コントローラ34と第2コントローラ36とが(ジャイロセンサユニット100を介さずに)接続されたときのコントローラ14全体の電気的構成の一例が示される。第1コントローラ34は、その内部に無線通信モジュール76を備え、無線通信モジュール76には、操作部80および加速度センサ84が接続される。無線通信モジュールはまた、共通のバスであるシリアルバス95に接続され、シリアルバス95には、撮像情報演算部81、および他のデバイスたとえばメモリ96などが接続される。なお、メモリ96は、たとえばEEPROMで構成され、第1コントローラのデバイス情報や、無線モジュール76,マイコン94等が動作するためのプログラム,データなどを記憶する。シリアルバス95は、たとえばI2C等のシリアルバスを用いることができる。
シリアルバス95の一方端には、互いに並列に配置されたスイッチSW1およびマイコン94の各々を介して(さらにはコネクタ42および40ならびにケーブル38を通して)、第2コントローラ36のマイコン89が接続される。前者のマイコン94には、ジャイロセンサ85が接続され、後者のマイコンに89には、操作部88および加速度センサ90が接続される。
シリアルバス95に接続された各デバイスには、シリアルバス95上のアドレス(番地)が割り当てられる。この実施例では、撮像情報演算部81に#1番地が、メモリ96に#2番地が、マイコン94には#3番地が、そしてマイコン89に#4番地が、それぞれ割り当てられるものとする。ここで#3番地は、ジャイロ機能を呼び出す呼出制御(図21,図22および図23参照)でのみ使用される特別なアドレスであり、メイン制御(図21,図24参照)では、任意の拡張デバイスに割り当てられる通常のアドレスである#4番地が使用される。
したがって、マイコン94に#4番地が割り当てられた状態は、その内蔵ジャイロセンサ85が起動された状態、つまりジャイロモードまたはジャイロ&第2コントローラモードに対応し、マイコン94に#3番地が割り当てられた状態は、その内蔵ジャイロセンサ85が休眠している状態、つまりスタンバイモードまたはバイパスモードに対応する。ここで、ジャイロモードとは、ジャイロ機能を用いるモードであり、かつ第2コントローラが接続されていないときのモードである。ジャイロ&第2コントローラモードとは、ジャイロ機能と第2コントローラを両方用いるモードである。また、スタンバイモードとはジャイロ機能を使わないモードで、かつ第2コントローラが接続されていないときのモードである。バイパスモードとは、ジャイロ機能を用いずに第2コントローラを用いるモードである。ジャイロ機能の利用の有無、第2コントローラの利用の有無に応じて上記4つのモードで制御が行われる。
したがってまた、ジャイロ&第2コントローラモードでは、アドレスとして同じ#4番地が割り当てられた複数のマイコン、つまりマイコン94とマイコン102および/または89とが、シリアルバス95に接続された状態になる。この場合、各マイコンは、ジャイロ・第2コントローラ識別情報(図17参照)に基づいて識別可能である。
無線モジュール76とマイコン94との間およびマイコン94とコネクタ42との間はAttachピンで接続されており、無線モジュール76は、Attachの値を参照することで、コネクタ42にジャイロセンサユニット100,第2コントローラ36等のデバイスが接続されているかどうかがわかる。
スイッチSW1は、マイコン94の制御下で、先述したように、ジャイロセンサ85を利用しないモード(スタンバイモードまたはバイパスモード)ではON(Connect)され、ジャイロセンサ85を利用するモード(ジャイロモードまたはジャイロ&第2コントローラモード)ではOFF(Disconnect)される(図19(A)参照)。
操作部80は、上述の操作ボタンないし操作スイッチ80a‐80iを示す。操作部80が操作されると、その操作を示すデータが無線通信モジュール76に出力される。加速度センサ84が検出した加速度を示すデータもまた、無線通信モジュール76へ出力される。加速度センサ84は、たとえば最大200フレーム/秒程度のサンプリング周期を有する。
撮像情報演算部81からは、マーカ22aおよび22bの撮影された画像内における位置座標を示すデータが、シリアルバス95を通して無線通信モジュール76に出力される。ジャイロセンサ85は、上述のジャイロセンサ85aおよび85bを示しており、たとえば加速度センサ84と同様のサンプリング周期を有する。マイコン94は、ジャイロセンサ85が検出した角速度を示すデータを、シリアルバス95を通して無線通信モジュール76に出力する。
操作部88は、上述のスティック88aおよび操作ボタン88b、88cを示す。操作部88が操作されると、その操作を示すデータ(操作データ)が、スイッチSW1がONの場合にはマイコン89からシリアルバス95を通して無線通信モジュール76に出力される。一方、スイッチSW1がOFFの場合には、操作データは、シリアルバス95を通してマイコン94に与えられ、マイコン94は、この操作データをシリアルバス95を通して無線通信モジュール76に出力する。
また、加速度センサ90も、加速度センサ84と同様のサンプリング周期を有しており、これにより検出された加速度を示すデータもまた、マイコン89によって操作データと同様に、スイッチSW1がONの場合にはスイッチSW1側のバイパスを通って無線通信モジュール76に出力され、スイッチSW1がOFFの場合にはマイコン94を経由して無線通信モジュール76に出力される。
なお、上述した無線通信モジュール76への各出力は、たとえば1/200秒周期で実行される。したがって、任意の1/200秒間に、操作部80からの操作データと、撮像情報演算部81のからの位置座標データと、加速度センサ84からの加速度データと、ジャイロセンサ85からの角速度データと、操作部88からの操作データと、加速度センサ90からの加速度データとが、1回ずつ無線通信モジュール76に向けて出力される。
上述のような第1コントローラ34の要素のうちスイッチSW1およびジャイロセンサ85が、従来の第1コントローラに対して追加され、さらにマイコン94がこれらを制御することで、第1コントローラ34にジャイロ機能が付加される。以下では、スイッチSW1およびジャイロセンサ85とマイコン94とからなる要部を“ジャイロ制御部85C”と呼ぶ。
図14には、第1コントローラ34と第2コントローラ36とがジャイロセンサユニット100を介して接続されたときのコントローラ14全体の電気的構成の一例が示される。ジャイロセンサユニット100には、ジャイロ制御部104Cが含まれている。ジャイロ制御部104Cは、スイッチSW2およびジャイロセンサ104とマイコン102とで構成される。ジャイロセンサ104は、上述のジャイロセンサ104aおよび104bを示しており、たとえば加速度センサ84と同様のサンプリング周期を有する。
本来の動作として、マイコン102は、スタンバイモードまたはバイパスモードでは、スイッチSW2をON(Connect)する一方、ジャイロセンサを休眠状態に置き、ジャイロモードまたはジャイロ&第2コントローラモードでは、スイッチSW2をOFF(Disconnect)する一方、ジャイロセンサ104が検出した角速度を示すデータをシリアルバス95を通して無線通信モジュール76に出力する。
しかし、この実施例では、第1コントローラ34(のマイコン94)と第2コントローラ36(のマイコン89)との間(のシリアルバス95)に、互いに並列に配置されたスイッチSW2およびマイコン102の各々が介在する。マイコン94がマイコン102を通してスイッチSW2およびジャイロセンサ104を制御することで、スイッチSW2は、図20に示されるように、モードによらず初期状態つまりON(Connect)状態に置かれ、ジャイロセンサ104は、モードによらず休眠状態(電源OFF状態)に置かれる。
図15には、図13または図14に示した第1コントローラの要部つまりジャイロ制御部85Cの構成が示される。上述のコネクタ42、コネクタ106、コネクタ108およびコネクタ40は、それぞれたとえば6ピンのコネクタであり、この6ピンの中に、コネクタ間の接続状態を示す変数“Attach”を制御するためのAttachピンが含まれている。Attachは、コネクタ間が切断されていることを示す“Low”と、コネクタ間が接続されていることを示す“High”との間で変化する。ここでは特に、マイコン94から見て、無線モジュール76側のAttachを“Attach1”、コネクタ42側のAttachを“Attach2”と呼ぶ。
上記6ピンのうち他の2つにはシリアルバス95が割り当てられており、ジャイロ制御部85Cは、無線モジュール76側のシリアルバス95とコネクタ42側のシリアルバス95とを互いに接続/分離するためのバススイッチSW1をさらに含む。
マイコン94は、2種類のA/D変換回路94aおよび94bを含んでおり、ジャイロセンサ85から出力される3軸周りの角速度信号は、これらA/D変換回路94aおよび94bの各々に与えられる。A/D変換回路94aでは、ジャイロセンサ85の検出範囲の全部(たとえば±360度/秒)を対象とする高角速度モードのA/D変換処理が実行され、A/D変換回路94bでは、ジャイロセンサ85の検出範囲の一部(たとえば±90度/秒)を対象とする低角速度モードのA/D変換処理が実行される。マイコン94は、これら2種類のA/D変換結果のいずれか一方を角速度データとして出力する。
具体的には、A/D変換回路94aおよび94bからある時刻に対応する2種類の角速度データが出力されると、マイコン94は最初、このうち低角速度モードの角速度データについて、その値Aが第1閾値Th1から第2閾値Th2(>Th1)までの範囲内にあるかどうか、すなわち条件“Th1≦A≦Th2”が満足されるか否かを、軸毎に、つまりヨー、ロールおよびピッチの各々について判定する。次に、これら3つの判定結果に基づいて、低角速度モードおよび高角速度モードのいずれか1つを選択する。たとえば、3つの判定結果それぞれに関して、YESであれば低角速度モードを選択し、NOであれば高角速度モードを軸ごとに選択する。そして、軸ごとに選択されたモードに従う角速度データを、選択されたモードを示すモード情報と共にそれぞれ出力する。つまり、角速度に応じてデータの精度を変えることによって、同じデータ量であっても、低速のときにはより精度の高いデータを出力することができる。
図16には、図14に示したジャイロセンサユニット100の要部つまりジャイロ制御部104Cの構成が示される。ジャイロ制御部104Cの構成は、マイコンの制御内容を除いて概ね上述したジャイロ制御部85Cの構成と同等である。なお、ジャイロ制御部104Cでは、Attach1およびAttach2は、マイコン102から見て第1コントローラ34(マイコン94)側および第2コントローラ36(マイコン89)側となる。
図17には、第1コントローラ34においてジャイロ制御部85Cが取り扱う(マイコン94から無線モジュール76に出力される)データのフォーマットが示される。図17(A)はジャイロ用データのフォーマットを示し、図17(B)は第2コントローラ用データのフォーマットを示す。なお、これらのフォーマットは、ジャイロセンサユニット100においてジャイロ制御部104Cが取り扱うデータのものと共通である。
図17(A)に示されるように、ジャイロ用データは、ヨー角速度データ、ロール角速度データおよびピッチ角速度データと、ヨー角速度モード情報、ロール角速度モード情報およびピッチ角速度モード情報と、第2コネクタ接続情報と、ジャイロ・第2コントローラ識別情報とを含む。
ヨー角速度データ、ロール角速度データおよびピッチ角速度データは、ジャイロセンサ104から出力されるヨー角速度信号、ロール角速度信号およびピッチ角速度信号をA/D変換して得られる、たとえば各14ビットのデータである。ヨー角速度モード情報、ロール角速度モード情報およびピッチ角速度モード情報は、それぞれ対応する角速度データのモードを示す各1ビットの情報であり、高角速度モードに対応する“0”と、低角速度モードに対応する“1”との間で変化する。
第2コントローラ接続情報は、コネクタ42または108に第2コントローラ36が接続されているか否かを示す1ビットの情報であり、非接続を示す“0”と、接続を示す“1”との間で変化する。ジャイロ・第2コントローラ識別情報は、当該データがジャイロセンサ85または104から出力されたデータであるか第2コントローラ36から出力されたデータであるかを識別する1ビットの情報であり、ジャイロセンサ85または104からのデータであることを示す“1”と、第2コントローラ36からのデータであることを示す“0”との間で変化する。
一方、第2コントローラからのデータは、左右方向(X軸方向)のスティック操作および前後方向(Z軸方向)のスティック操作をそれぞれ示すXスティック操作データおよびYスティック操作データと、X軸方向の加速度、Y軸方向の加速度およびZ軸方向の加速度をそれぞれ示すX加速度データ、Y加速度データおよびZ加速度データと、ボタン操作データと、第2コネクタ接続情報と、ジャイロ・第2コントローラ識別情報とを含む。
第1コントローラ34において、マイコン94は無線モジュール76に、図17(A)のフォーマットに従うジャイロ用データと、図17(B)のフォーマットに従う第2コントローラ用データとを、それぞれたとえば1/200秒周期で交互に、つまり片方のフォーマットに関しては、それぞれ1/100秒周期で出力する。これはゲームの処理等で一般的な処理期間である1/60秒周期よりも十分短いことから、データを交互に出力してもゲーム処理で両方のデータを1フレームで同時に利用することができる。
無線モジュール76は、マイコン76C,メモリ76Rなどを含み、マイコン76Cの制御によって、メモリ76Rを記憶領域(作業領域やバッファ領域)として用いながら、取得したデータをアンテナ98を介してゲーム装置12に送信したり、ゲーム装置12からのデータをアンテナ98を介して受信したりする。
マイコン94から無線モジュール76に出力されたデータは、マイコン76Cを経て一時的にメモリ76Rに格納される。第1コントローラ34内の操作部80、撮像情報演算部81および加速度センサ84から無線モジュール76に出力されたデータもまた、メモリ76Rに一時的に格納される。マイコン76Cは、ゲーム装置12への送信タイミングが到来すると、メモリ76Rに格納されているデータをコントローラデータとして無線モジュール76へ出力する。
コントローラデータには、図17(A)に示したジャイロ用データおよび/または図17(B)に示した第2コントローラ用データに加えて、図18(A)に示すような第1コントローラ用データが含まれる。第1コントローラ用データには、加速度センサ84の出力に基づくX加速度データ、Y加速度データおよびZ加速度データと、撮像情報演算部81の出力に基づく位置座標データと、操作部80の出力に基づくボタン操作データとが含まれる。
無線モジュール76は、Bluetooth(ブルートゥース)(登録商標)のような近距離無線通信技術を用いて、所定周波数の搬送波をコントローラデータで変調し、その微弱電波信号をアンテナ98から放射する。つまり、コントローラデータは、無線モジュール76で微弱電波信号に変調されて第1コントローラ34から送信される。微弱電波信号はゲーム装置12側の無線コントローラモジュール52で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置12はコントローラデータを取得することができる。ゲーム装置12のCPU44は、コントローラ14から取得したコントローラデータに基づいてゲーム処理を行う。なお、第1コントローラ34とゲーム装置12との無線通信は、近距離無線通信に限らず、無線LANなど他の規格に従って実行されてもよい。
以上のように構成されたゲームシステム10では、ボタン操作だけでなく、コントローラ14自体を動かすことによっても、ゲームなどのアプリケーションに対する入力を行うことができる。ゲームをプレイする際には、たとえば図12に示すように、プレイヤは、その右手で第1コントローラ34(具体的にはハウジング78の把持部78a:図2)を持ち、その左手で第2コントローラ36を持つ。上述のように、第1コントローラ34には3軸方向の加速度を検出する加速度センサ84が内蔵され、第2コントローラ36にも同様の加速度センサ90が内蔵されている。第1コントローラ34にはさらに、3軸周りの角速度を検出するジャイロセンサ85も内蔵されている。第1コントローラ34および第2コントローラ36がそれぞれプレイヤによって動かされると、加速度センサ84およびジャイロセンサ85によって、第1コントローラ自身の動きを示す3軸方向の加速度値および3軸周りの角速度値が検出され、加速度センサ90によって、第2コントローラ自身の動きを示す3軸方向の加速度値が検出される。
これらの検出値は、先述したコントローラデータの態様でゲーム装置12に送信される。ゲーム装置12(図11)では、コントローラ14からのコントローラデータは、入出力プロセッサ64aによってアンテナ52aおよび無線コントローラモジュール52を介して受信され、受信されたコントローラデータは、内部メインメモリ64eまたは外部メインメモリ46のバッファ領域に書き込まれる。CPU44は、内部メインメモリ64eまたは外部メインメモリ46のバッファ領域に格納されたコントローラデータを読み出し、このコントローラデータから検出値つまりコントローラ14によって検出された加速度および/または角速度の値を復元する。
なお、角速度データには高角速度および低角速度の2つのモードがあるため、これら2つのモードにそれぞれ対応する2種類の角速度復元アルゴリズムが準備される。角速度データから角速度の値を復元するにあたっては、当該角速度データのモードに対応する角速度復元アルゴリズムが、角速度モード情報に基づいて選択される。
CPU44はさらに、取得された角速度や加速度に基づいてゲーム処理を行うことができる。たとえば、角速度や加速度に基づいて姿勢を算出し、姿勢に基づいたゲーム処理を行うことができる。具体的には、入力装置の姿勢を角速度に基づいて更新することで姿勢を算出することができ、さらに、当該姿勢に対して加速度によって補正をすることができる。また、入力装置の振りに基づいたゲーム処理を行うことができる。
ところで、ゲームには、第1コントローラ34しか利用しない1コントローラ用ゲームと、第1コントローラ34および第2コントローラ36を利用する2コントローラ用ゲームとがある。メインコントローラである第1コントローラ34は、どのゲームをプレイする場合にも必要であるが、拡張コントローラである第2コントローラ36は、2コントローラ用ゲームをプレイするとき、第1コントローラ34に接続され、1コントローラゲームをプレイするときには通常取り外される。
一方、ジャイロセンサユニット100は、先述したように、従来の第1コントローラのための拡張センサないし拡張コントローラであって、この実施例の第1コントローラ34に接続すべきものではないが、コネクタ形状が共通なので誤って接続される場合もあり得る。さらには、第2コントローラ36がジャイロセンサユニット100を介して第1コントローラ34に接続される可能性もある。
第1コントローラ34のジャイロ制御部85Cによるモード制御の概要を図19に示す。図19(A)にはジャイロ制御部85Cの制御対象を記載したテーブルが、図19(B)にはジャイロ制御部85Cのモード遷移が、それぞれ示される。なお、テーブルは、たとえばメモリ94cに記憶される。図19に示されるように、ジャイロセンサユニット100に準備されているモードは、先述した“スタンバイ”、“バイパス”、“ジャイロ”および“ジャイロ&第2コントローラ”の4種類である。
図19(A)を参照して、ジャイロ制御部85Cの制御対象には、“ジャイロ機能”、“ジャイロ電源”、“バススイッチ”、“Attach1”および“バスアドレス”等が含まれる。ジャイロ機能は、スタンバイおよびバイパスの各モードでは停止状態(No Active)に置かれる一方、ジャイロおよびジャイロ&第2コントローラの各モードでは起動状態(Active)に置かれる。ジャイロ電源つまりジャイロセンサ85への電源供給は、スタンバイおよびバイパスの各モードで停止(OFF)され、ジャイロおよびジャイロ&第2コントローラの各モードでは実行(ON)される。バススイッチSW1は、スタンバイおよびバイパスの各モードで接続(Connect)され、ジャイロおよびジャイロ&第2コントローラの各モードでは切断(Disconnect)される。
拡張コネクタつまりコネクタ42には、バイパスおよびジャイロ&第2コントローラの各モードでは第2コントローラ36が接続され、スタンバイおよびジャイロの各モードでは第2コントローラ36が接続されない。Attach1は、スタンバイモードで非接続状態を示す“Low”に制御され、バイパス、ジャイロおよびジャイロ&第2コントローラの各モードでは接続状態を示す“High”に制御される。バスアドレスに関しては、スタンバイおよびバイパスの各モードに限って、特別なアドレス(#3:後述)が注目される。なお、ジャイロおよびジャイロ&第2コントローラの各モードでは、通常のアドレス(#4:後述)が注目される。
図19(B)を参照して、第1コントローラ34が起動されたときのモード、つまりジャイロ制御部85Cの初期モードは、たとえばスタンバイモードである。なお、初期モードは、スタンバイ以外のモードたとえばジャイロモードなどでもよい。第1コントローラ34に第2コントローラ36が接続されると、ジャイロ制御部85Cは、スタンバイモードからバイパスモードに移行し、その後に第2コントローラ36が取り外されると、バイパスモードからスタンバイモードに移行する。
一方、ジャイロ対応型のアプリケーションは、必要に応じて角速度データを取得するべく、無線モジュール76を通してジャイロ制御部85Cに呼び出しおよびリセットをかける。ジャイロ制御部85Cは、スタンバイモードでアプリケーション(無線モジュール76)から呼び出しを受けるとジャイロモードに移行し、ジャイロモードでアプリケーションからリセットを受けるとスタンバイモードに移行する。ジャイロ制御部85Cはまた、ジャイロモードで第2コントローラ36が接続されるとジャイロ&第2コントローラモードに移行し、ジャイロ&第2コントローラモードで第2コントローラ36が取り外されるとジャイロモードに移行する。ジャイロ制御部85Cはさらにまた、ジャイロ&第2コントローラモードでアプリケーションからリセットを受けるとバイパスモードに移行し、バイパスモードでアプリケーションから呼び出しを受けるとジャイロ&第2コントローラモードに移行する。
なお、アプリケーションがジャイロ非対応型の場合、ジャイロ制御部85Cのモードは、スタンバイモードおよびバイパスモードの間で切り換わるに止まる。
ところで、図19に示したジャイロ制御部85Cによるモード制御は、ジャイロセンサユニット100のジャイロ制御部104Cが本来行うべきモード制御と共通のものである。したがって、ジャイロセンサユニット100が従来の第1コントローラに接続された場合には、ジャイロ制御部104Cが図19のようなモード制御を実行する。
しかし、ジャイロセンサユニット100がこの実施例の第1コントローラ34に接続された場合には、ジャイロ制御部104Cは、ジャイロ制御部85Cの制御下で、図20に示すようなモード制御を行う。図20(A)を参照して、スタンバイモードおよびバイパスモードにおける制御内容は、図19(A)に示したスタンバイモードおよびバイパスモードにおける制御内容とそれぞれ共通のものであり、そして、ジャイロモードおよびジャイロ&第2コントローラモードにおける制御内容は、スタンバイモードおよびバイパスモードにおける制御内容とそれぞれ共通のものである。
図20(B)を参照して、ジャイロ制御部104Cは、ジャイロセンサユニット100が第1コントローラ34に接続されたとき起動されるが、このときのモード、つまりジャイロ制御部104Cの初期モードは、たとえばスタンバイモードである。ジャイロセンサユニット100が第1コントローラ34に接続された状態で、さらに、ジャイロセンサユニット100に第2コントローラ36が接続されると、ジャイロ制御部85Cは、スタンバイモードからバイパスモードに移行し、その後に第2コントローラ36が取り外されると、バイパスモードからスタンバイモードに復帰する。一方、アプリケーション(無線モジュール76)からジャイロ制御部85Cへの呼び出しおよびリセットは、ジャイロ制御部85Cによって無効化される。これによって、ジャイロモードおよびジャイロ&第2コントローラモードへは移行できなくなり、それぞれスタンバイモードおよびバイパスモードに限定されることになる。
このように、ジャイロ制御部104Cは、ジャイロ制御部85Cの制御下に入ることで、スタンバイおよびバイパスの2モード間で遷移するようになる。具体的には、ジャイロ制御部104Cは、ジャイロ制御部85Cがスタンバイモードまたはジャイロモードにあるときはスタンバイモードとなり、ジャイロ制御部85Cがバイパスモードまたはジャイロ&第2コントローラモードにあるときはバイパスモードとなる。この結果、何もデータを出力しないか、第2コントローラ36のデータをそのままバイパスするだけになるので、ジャイロセンサユニット100が無い場合と変わらないことになり、この実施例の第1コントローラ34にジャイロセンサユニット100が接続されても、誤動作等の発生は回避される。さらに、ジャイロセンサユニット100を介して第2コントローラが接続されても、問題なく動作する。
マイコン94の制御についてより詳しく説明する。第1コントローラ34のジャイロ制御部85C(マイコン94)は、図21〜図24に示すフローに従って動作する。なお、これらのフロー図に対応する制御プログラムは、たとえばメモリ96または94cに格納されている。
図21を参照して、マイコン94は、最初のステップS1で、無線モジュール76からのアクセスの有無を判別する。ステップS1でNOであれば、同様の判別処理が所定時間毎に繰り返される。ステップS1でYESと判別されると、ステップS3およびS5で当該アクセスのアドレス(宛先)を判別する。
ここで、無線モジュール76からのアクセスのデータ構造について説明する。図18(B)に示すように、アクセスデータは、アドレス,R/W,およびデータを含む。アドレスは、シリアルバス95上でのアクセス先を示す番地(#1,#2,…)であり、たとえば7ビットで記述される。R/Wは、ReadまたはWriteを示すコマンドであり、たとえば1ビットで記述される。データは、たとえばR/Wの詳細を示す情報であり、書き込み先/読み出し元を示すアドレス,書き込むべき/読み出すべき内容などが記述される。
たとえば、アドレス(宛先)に#3が記述され、R/WにWriteが記述され、そしてデータに、モード変更に対応する特定アドレスと、当該特定アドレスに書き込むべきモード情報とが記述されたアクセスデータは、アドレスが#3番地のデバイスたとえばマイコン94に対し、スタンバイまたはバイパスからジャイロまたはジャイロ&第2コントローラへのモード変更(ジャイロ呼び出し)を指示するコマンドとして機能する。また、たとえば、アドレス(宛先)に#3が記述され、R/WにReadが記述され、そしてデータに、デバイス情報の読み込みに対応する別のアドレスが記述されたアクセスデータは、アドレスが#3番地のデバイスたとえばマイコン94に対し、デバイス情報の出力(無線モジュール76から見ると読み込み)を指示するコマンドとして機能する。
図21に戻って、ステップS3では当該アクセスのアドレス(宛先)が#3であるか否かが判別され、ステップS5では当該アクセスのアドレス(宛先)が#4であるか否かが判別される。ステップS3およびS4の判別結果がいずれもNOであれば、当該アクセスはジャイロ制御部85Cへのアクセスではないとみなして、ステップS1に戻る。
ステップS3でYESと判別されると、ステップS3aに移り、自身のアドレスが#3であるか否かをさらに判別する。ここでもYESであれば、ステップS7で呼出制御(図22参照)を実行し、その後、ステップS1に戻る。ステップS3aでNOであれば、既にジャイロ機能は起動されているので呼び出し処理は不要とみなして、ステップS1に戻る。
ステップS5でYESと判別されると、ステップS5aに移り、自身のアドレスが#4であるか否かをさらに判別する。ここでもYESであれば、ステップS9でメイン制御(図24参照)を実行した後、ステップS1に戻る。ステップS5aでNOであれば、ジャイロ機能は未だ起動されていないので通常制御は不要とみなして、ステップS1に戻る。
上記ステップS7の呼出制御は、たとえば図22および図23のサブルーチンに従って実行される。図22を参照して、マイコン94は、最初、ステップS11で、スイッチSW1をOFF(Disconnect)する。これによって、コネクタ42(に接続された拡張デバイス)側から無線モジュール76へのシリアルバス95によるバイパスが遮断され、その結果、当該アクセスは、その先頭部分(アドレスなど:図18(B)参照)を除いて、コネクタ42へは到達しなくなる。すなわち、無線モジュール76からのアクセスが自身を示す#3番地へのアクセスであると分かった段階、つまり先頭部分がシリアルバス95に送信された時点でスイッチSW1をOFF(Disconnect)するので、それ以降にコネクタ42側へ送信される制御内容を示すデータが遮断される。また、当該アクセスに対するマイコン102からの応答が仮にあっても、その応答データは無線モジュール76に到達せず、マイコン94で廃棄等の処理が行えるようになる。
次に、ステップS13で、無線モジュール76側のAttachつまりAttach1(図15参照)をLowにする。これによって、無線モジュール76からは、ジャイロセンサ85が見えない状態となる。
そして、ステップS15で、シリアルバス95に対してバスクリア処理を実行する。具体的には、シリアルバス95に所定数のクロックを流し、これに応答してシリアルバス95に送出されたデータを破棄する。つまり、先述したように、当該アクセスの先頭部分は、同じ#3番地が割り当てられたマイコン102によっても検知されるため、マイコン102が何らかの応答を行う可能性がある。そこで、バスクリア処理を実行して、当該アクセスを取り消し、マイコン102が応答すべきデータを持っていればこれを出力させ、シリアルバス95を介してマイコン94に送信されてきたデータは特に受け取らずに破棄し、マイコン102を元の状態に戻しておく。
バスクリア処理が完了すると、ステップS17に進んで、当該アクセスはReadであるか否かを判別する。ここでNOつまりWriteであれば、処理はステップS29(図23参照:後述)に移る。ステップS17でYESつまりReadであれば、ステップS19で、無線モジュール76にレスポンス(読み込み対象として指定されたデータ、たとえばジャイロの状態を示すデータ等)を返す。そして、次のステップS21で、指定されたデータを返信し終えたか(読み込みが完了したか)否かを判別し、NOであればステップS19に戻って同様の処理を繰り返す。
ステップS21でYESであれば、ステップS23に進み、スイッチSW1をON(Connect)する。これによって、コネクタ42側から無線モジュール76へのシリアルバス95によるバイパスが回復される。
次に、ステップS25で、コネクタ42側のAttachつまりAttach2(図15参照)はHighであるか否かを判別し、NOつまりAttach2=Lowであれば、何もせずに(Attach1=Lowのままで)メインルーチン(図21参照)に復帰する。ステップS25でYESつまりAttach2=Highであれば、ステップS27でAttach1=Highとした後、メインルーチンに復帰する。
上記ステップS17でアクセスがWriteであると判別された場合の処理は、次のようになる。図23を参照して、マイコン94は、ステップS29で、当該アクセスは、モード変更に対応する特定番地へのWriteであるか否か、要するにモード変更を指示するコマンドであるか否かを判別する。ここでNO、つまり他の番地へのWriteであれば、処理はステップS45(後述)に移る。
ステップS29でYESつまり特定番地へのWriteであれば、ステップS31に進んで、当該特定番地に、指定された値つまり変更後のモード情報(“ジャイロモード”または“ジャイロ&第2コントローラモード”)を書き込む。次に、ステップS33で無線モジュール76にレスポンス(Ack)を返し、ステップS35で更新後のモード情報に応じて内蔵ジャイロつまりジャイロセンサ85を起動する。ジャイロ起動に伴い、ステップS37で自身のアドレスを#3から#4に変更し、そしてステップS39でAttach1=Highとする。Attach1=Highとしたことで、無線モジュール76にジャイロセンサ85が接続されていると認識される。
次に、ステップS41で、Attach2=Highであるか否かを判別し、NOつまりAttach2=Lowであれば、何もせずにメインルーチン(図21参照)に復帰する。ステップS41でYESつまりAttach2=Highであれば、ステップS43で第2コントローラ36の初期化を行った後、メインルーチンに復帰する。
上記ステップS29でNOと判別された場合の処理は、次のようになる。マイコン94は、ステップS45で、他の番地に、指定された値を書き込む。次に、ステップS47で無線モジュール76にレスポンス(Ack)を返し、ステップS48で当該番地への書き込み値に応じた処理を実行し、そしてステップS49でスイッチSW1をON(Connect)する。
次に、ステップS51で、Attach2=Highであるか否かを判別し、NOつまりAttach2=Lowであれば、何もせずにメインルーチンに復帰する。ステップS51でYESつまりAttach2=Highであれば、ステップS43でAttach1=Highとした後、メインルーチンに復帰する。
上記ステップS9の通常制御は、たとえば図24のサブルーチンに従って実行される。図24を参照して、マイコン94は、最初、ステップS61でジャイロモードへのモード更新を行う。具体的には、メモリ94c内のテーブル(図19(A))に記述された“ジャイロ”の規定に従って、ジャイロ機能を起動させ、ジャイロセンサ85への電源供給を開始し、バススイッチSW1を切断(OFF)し、コネクタ42を休止させ、Attach1を“High”(=1)に制御し、そしてシリアルバス95の通常のアドレス(#4)への注目を開始する。なお、既にジャイロモードである場合には、このようなモード更新処理の全部または一部は省略されてよい。こうしてジャイロ制御部85Cがジャイロモードに移行すると、処理はステップS63〜S67のループに入る。
ステップS63ではAttach2が“1”つまりHighであるか否かが、ステップS65ではアプリケーションからリセットがかかったか否かが、そしてステップS67では現時刻がデータ出力タイミングに該当するか否かが、それぞれ判別される。前回のデータ出力から既定時間が経過すると、ステップS67の判別結果がYESとなり、処理はステップS69に移る。ステップS69では、マイコン94は、ジャイロセンサ85からのジャイロ用データ(図17(A))を無線モジュール76側に出力する。出力後、処理はステップS63〜S67のループに戻る。
アプリケーションから(無線モジュール76を通して)リセットがかかると、ステップS65の判別結果がYESとなって、処理はステップS71に移る。ステップS71では、スタンバイモードへのモード更新が行われる。このモード更新では、メモリ94c内のテーブル(図19(A))に記述された“スタンバイ”の規定が参照される。これにより、スイッチSW1はON状態となる。こうしてジャイロ制御部85Cがスタンバイモードに移行すると、処理はステップS85(後述)に進む。
Attach2が“0”から“1”に変化すると、ステップS63の判別結果がYESとなり、処理はステップS73に移る。ステップS73では、ジャイロ&第2コントローラモードへのモード更新が行われる。このモード更新では、メモリ94c内のテーブル(図19(A))に記述された“ジャイロ&第2コントローラ”の規定が参照される。これにより、スイッチSW1はOFF状態となる。こうしてジャイロ制御部85Cがジャイロ&第2コントローラモードに移行すると、処理はステップS75〜S79のループに入る。
ステップS75ではAttach2が“0”つまりLowであるか否かが、ステップS77ではアプリケーションからリセットがかかったか否かが、そしてステップS79では現時刻がデータ出力タイミングに該当するか否かが、それぞれ判別される。前回のデータ出力から既定時間が経過すると、ステップS79の判別結果がYESとなり、処理はステップS81に移る。ステップS81では、マイコン94は、ジャイロ用データ(図17(A))および第2コントローラ用データ(図17(B))を交互に無線モジュール76側に出力する。出力後、処理はステップS75〜S79のループに戻る。
アプリケーションからリセットがかかると、ステップS77の判別結果がYESとなって、処理はステップS83に移る。ステップS83では、バイパスモードへのモード更新が行われる。このモード更新では、メモリ94c内のテーブル(図19(A))に記述された“バイパス”の規定が参照される。これにより、スイッチSW1はON状態となる。こうしてジャイロ制御部85Cがバイパスモードに移行すると、処理はステップS85に進む。
Attach2が“1”から“0”に変化すると、ステップS75の判別結果がYESとなり、処理はステップS61に戻る。
上記ステップS71またはS83に続くステップS85では、自身のアドレスを呼出制御用の特別なアドレスである#3に変更する。アドレス変更後、処理はメインルーチン(図21参照)に復帰する。
以上から明らかなように、この実施例の第1コントローラ34では、操作部80,加速度センサ84といった入力デバイスを制御し、かつデータを取得する無線モジュール76が、所定のバスたとえばシリアルバス95に接続されている。シリアルバス95には、コネクタ42を介してジャイロセンサユニット100が接続され得る。シリアルバス95の、コネクタ42から無線モジュール76への接続は、スイッチSW1によってON/OFFされる。ジャイロセンサユニット100と同等の機能を有するジャイロセンサ85から取得されるデータは、シリアルバス95の無線モジュール76側およびコネクタ42側にそれぞれスイッチSW1を介さずに接続され、かつスイッチSW1のON/OFFを制御するマイコン94によって、シリアルバス95を介して無線モジュール76に送信される。マイコン94は、無線モジュール76から自身へのアクセスがあったとき、スイッチSW1の接続をOFFにする(S11)。
この実施例によれば、無線モジュール76からマイコン94へのアクセスに応じて、コネクタ42から無線モジュール76への接続がOFFされるので、コネクタ42にジャイロセンサユニット100が接続されても、ジャイロセンサ85とジャイロセンサユニット100との間でデータ競合等の問題が生じることはなくなる。したがって、ハウジング形状が同じでよく、ジャイロセンサユニット100への互換性を維持できる
なお、この実施例では、第1コントローラ34と第2コントローラ36との間はケーブル38で接続されたが、無線通信により接続されてもよい。
なお、以上で挙げたバス名,アドレス値,データフォーマットなどは、一例に過ぎず、適宜変更されてよい。
以上では、一例として、ゲームシステム10を用いて説明したが、この発明は、入力装置(入力デバイス)からのデータに基づいて、ゲームなどのアプリケーションに従う情報処理を実行する、情報処理システムに適用できる。