2007年09月07日

ゲームコントローラのレスポンス問題

ゲームコントローラがUSBで接続されるようになってから、レスポンスというのが大きな問題になるようになりました。なぜこのような問題が発生するかというと、それは「ろくにゲームもしない人がコントローラを作っているから」です。

という話は置いておいて、技術的な面からこの問題について説明します。

キーボードやマウス、ゲームコントローラのような入力機器の状態をホストであるPCに伝える手段に、「割り込み」と「ポーリング」という2種類の方法があります。

割り込みは、デバイスが自分から能動的にデータを送り込む方式で、CPUはデバイスの状態を監視する必要はありません。CPUが他の仕事をしているときでも、デバイス側から呼びかけてCPUに今やっている仕事をいったん中断させてから情報を渡します。割り込みが発生するたびにCPUは仕事を中断させないといけないので、あまり頻繁に割り込みをかけると全体の処理速度に影響が出てきます。(逆に、割り込みがかかるまでCPUは居眠りをしていてもいい)この方式は、非周期的で入力の頻度が少ない機器に向いています。また、入力の取りこぼしが発生しないという利点もあります。PCではキーボードとマウスがこの方式を使っています。

一方ポーリングは、CPU側からデバイスに現在の状態を問い合わせることで情報を伝えます。デバイス側から自発的に情報を送ることはせず、聞かれるまで黙っています。この方式では、CPUから問い合わせがあったときに最新の状態を伝えるだけで、前回の問い合わせから今回までの間に起こった変化については関知しません。そのため、ポーリングの間隔が十分に短くないと、入力の取りこぼしがおきてしまいます。また、入力を受け付けている間は周期的に問い合わせる必要があるため、CPUはゆっくり休むことはできません。一般的にゲームコントローラはこちらの方式を使っています。

両者のもう1つの特徴は、割り込みデバイスは基本的に入力の「変化」を情報として伝え、ポーリングデバイスは現在のありのままの「状態」を伝えます。例えばキーボードでは、あるキーが押されたらそのキーがONになったという信号を送りますが、そのキーが押され続けている間は何も送りません。次にキーが離された時点で、OFFになったという信号を送ります。(実際には押されている間は周期的にキーONの信号を送っていたような気がする)このとき、キーOFFの信号が何らかの原因でロストしてしまうと、キーを離しても押しっぱなしの状態になってしまいます。Windows上でキーボードやマウスのボタンが押しっぱなしの状態になってしまった経験がある方も多いと思います。逆にポーリングデバイスでは、このような押しっぱなし現象は発生しません。

長くなったので、続きはゲームコントローラのレスポンス問題 その2で。

2007年09月07日 【PC環境・周辺機器】 | コメント(0) |

この記事へのトラックバック
この記事へのコメント

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。