キーボードの同時押しについて

Last-modified: 2013-08-25 (日) 18:05:32

「同時押し」についての誤解

  • ゲーマーにとって、自分のキーボードがいくつまで同時押しに対応しているかは気になるポイントだろう。

     FPSでは、一般に4~5キーの同時押しに対応していれば必要十分といわれることが多いが、安心感を求めてすべてのキーの同時押しに対応したキーボードを求める者も多い。比較的高価であるにもかかわらず、Nキーロールオーバー対応キーボードがゲーマー間で一定の人気を博しているのには、そうした事情もあるだろう。

     だが、同時押しに関してはいくつか陥りやすい誤解がある。
  • 驚くかも知れないが、これらはすべて誤解であり、厳密に言えば誤りとなる。

     以下、詳しく解説する。

「同時押し」の種類

  • まず、前提として、「同時押し」を細かく分類すると、以下のようになる。
  1. 同時に押されているキー数にかかわらず「新たに押されたキーの入力」を認識し
    かつ
    「同時に押下されているキー数」を無制限に認識できるもの。
  2. 同時に押されているキー数にかかわらず「新たに押されたキーの入力」を認識する

    「同時に押下されているキー数」は一定数までしか認識できないもの。
  3. 一定のキー数までしか「新たに押されたキーの入力」を認識せず
    かつ
    「同時に押下されているキー数」も一定数までしか認識できないもの。
  • iiiはごく普通の、同時押しに制限のあるキーボードであることは一目瞭然だが、iiiの違いはよく分からないと言う人もいるだろう。
    実は、iiiの前段部が、Nキーロールオーバーの定義であり、
    iの後段部が、実際にゲームで問題となる全キー同時押しに対応しているかどうかとなる。

    ※以下、「全キー同時押し」=「キーが同時に押下された状態にあることをキーの種類・数に関わりなく無制限に認識できること」とする。

  • 具体例を挙げると、
    iに該当するのがPS/2版のRealforceであり、
    iiに該当するのがHHK ProやUSB版のRealforceになる。
     動作の側面から言うと、キーボードのすべての文字キーを同時に押した場合、
    PS/2版のRealforceでは「すべてのキーが同時に押下されている」ことがPCに伝わるが、
    HHK ProやUSB版のRealforceではどれか「6つのキーが同時に押下されている」ことしかPCに伝わらない
  • この点について、
    「同時押し検出ソフト(BR-KEYCHECK)」で全キーを押すと、全キーが赤く表示される」こと、
    あるいは「エディタなどを開いて全キーを同時押しすると、すべての文字がきちんと入力される」こと
    などを理由に、HHK ProやUSB版のRealforce(やその他のキーボード)は「全キー同時押し」に対応していると考える人もいるだろう。
  • しかし、この考えが誤りであることは以下のテストをすれば明らかになる。
    • まず、「同時押し検出ソフト(BR-KEYCHECK)」は、実はキーを離す動作を認識しない。
       試しに、2つのキーを押して、どちらかのキーだけ離してみると、2つのキーともに赤く表示されたままになる。
       つまり、このソフトではiiiの前段部はチェックできても、後段部はチェックできず、「全キー同時押し」が本当にできているかはチェックできない

    • 次に、HHK ProやUSB版のRealforceについては、以下のソフトが参考になる。
      http://www.vector.co.jp/soft/win95/util/se111921.html
      このソフトは、キーを押したときではなく、離したときにカウンタが上昇していく。
       今、ソフトを起動して、ZからMまで1つずつキーを指をはなさずに押していくとする。仮にそのキーボードが「全キー同時押し」に対応しているならば、Mまで押しても(どこまで押しても)カウンタは0のままのはずである。
       実際、PS/2版のRealforceではカウンタは0のままとなる。
       しかし、USB版のRealforceではMを押した瞬間にカウンタが1となる。
       つまり、どれかのキーが離された扱いになってしまっているのであり、6キーまでしかiiiの後段の意味での)同時押しには対応していないことが分かる

       このとき注意すべきなのは、(HHK ProやUSB版のRealforceなどの)「全キー同時押し」には対応していないがNキーロールオーバーには対応している(後述)キーボードの場合、新たに押下されたキーの入力があったこと自体は認識されている点である。
       そのため、これらのキーボードで全キーを同時に押すと、エディタなどでは結果的に押したキーすべてが入力される。これは、一見すると「全キー同時押し」がされているように見えるため、誤解が生じる一因となっている。
  • 一方、もし全キー同時押しにHHK ProやUSB版のRealforceが対応していないなら、Nキーロールオーバーといううたい文句は嘘なのかとも思えるが、これは嘘ではない。
     前述の通り、Nキーロールオーバーの定義は基本的にiiiの前段部(言い換えれば「複数のキーが同時に押打されたときに、そのキー全てを読取れる機能」)であり、後段部は含まない。
     つまり、Nキーロールオーバーと「同時に押下されているキー数をいくつまで認識できるか」は厳密には関係がない。実際、FM-7キーボードは、Nキーロールオーバー採用であったが、同時押しは認識せず、4と8の同時押しによる斜め移動などはできなかった。
     従って、HHK ProやUSB版のRealforceも(全キー同時押しには対応していないが)Nキーロールオーバー対応はしていることになる。

     逆に言えば、Nキーロールオーバー対応だからと言って、「全キー同時押し」に対応しているとは限らないと言うこととなる。

なぜ違いが生まれるか

  • 前段部における、iおよびiiと、iiiの差については、wikipedeaNキーロールオーバーの項を参照のこと。
  • 問題は、同じiiiの前段部(Nキーロールオーバー)に対応したキーボード間で、なぜ後段部(「全キー同時押し」)への対応が分かれるかである。

    これについては、PS/2とUSBの通信方法の違いが大きな原因となっている。
    • PS/2キーボードでは、キーが押されたとき、離されたときにその情報が1つずつ送信される。つまりキー状態の変化情報が送信される。
    • USBキーボードでは変化でなくて状態、つまり今どのキーが押されているかの「リスト」が送信される。

      そして、このリスト送信に使われているデータサイズが、普通のキーボードでは「modifier と reserve で 1 バイトずつ、通常キーが 6 バイト」で、合計 8 バイトとなっている。

      そのため、普通のUSBキーボードではiiiiiしか実現できず、通常キーは最大6キー同時押しまでの対応となる(なお、シフトキーなどを含めれば6キー以上の同時押しも可能である。なぜなら、上述の通り、通常キー以外に計2バイト割り当てられているからである)。
      • この点、従来は、ほとんどのUSBキーボードに使われているUSB LowSpeedでは「MaxPacketSize」が8であることから、一度に送信できるデータ量の上限が8バイトであるとして、USBキーボードの制約を説明する見解が主流だった。
      • しかし、「MaxPacketSize」は文字通りパケットのサイズであって、データのサイズではない。データがパケットより大きければ、複数のパケットを転送すれば良いだけであり、従来の見解では十分に制約を説明できない。
      • そこで、USBでの制約は、USBキーボード設計における通例によりデータサイズが8バイトにされていることによるとする説が有力となっている(事実、PS/2→USB変換器ではあるが、DRKBCNでは、USB LowSpeedでの接続ながらデータサイズを増やすことで10キー同時押しを実現しており、USB LowSpeedでもデータサイズを増やすことは可能である)。このデータサイズが通例となっているのは、Boot Protocolにおいて最低限要求されている6キーのデータサイズを実現するためと思われる。
      • もっとも、仮にデータサイズを全キー分用意したとしても、全キー同時押しができるとは限らない。ドライバによる制約も考えなくてはならないからである。
      • そして、Windowsの標準ドライバでは、最大10キーまでの同時押ししか正常認識されないと推測されている。なぜなら、前述のDRKBCNは通常キーで14キー分のデータサイズを用意しているにもかかわらず、Windowsの標準ドライバで正常認識されるのはシフトキー等含めて10キーまでだからである。
      • したがって、USBキーボードで全キー同時押しを実現するには、データサイズの壁と、ドライバの壁の、両方を越える必要があることになる。なお、USB LowSpeedでこれを実現した場合、パケットサイズは最大8バイトであることから、複数パケット送信によりポーリングレートに影響が出る可能性があるが、未確認(通常の2倍である16バイトのデータサイズを送信するDRKBCNでは、ポーリング間隔が16msと、通常のキーボードの8msの2倍になってしまっているとされる)。
  • 以上から、「全キー同時押し」を実現できるのは、原則としてPS/2接続のキーボードのみということとなる。
  • もっとも、USBキーボードでもデータサイズを増やした上で対応ドライバが用意されれば、全キー同時押しを実現可能なはずである(ただし、現時点では、USBキーボードで「全キー同時押し」に対応したものは確認されておらず、また、キーボード側のコントローラーやドライバの実装なども考えるとこれが実現する見通しは無い)。
    • しかしながら、キーボードを複合デバイス扱い(OS上からはキーボードが複数接続されているように見える)にして、力業で同時押しに対応したものが存在する。(例:Cooler Master社のQuick Fire Proなど)

まとめ

  • Nキーロールオーバー対応キーボードだからといって、「全キー同時押し」可能とは限らない。但し、「全キー同時押し」可能なキーボードは、Nキーロールオーバー対応でなければならない(Nキーロールオーバー対応は「全キー同時押し」の、十分条件ではないが、必要条件である)。
  • PS/2接続は通信方法の性質上、「全キー同時押し」に対応しやすい(キーボードがNキーロールオーバー対応なら、「全キー同時押し」に対応できる)。
  • 現在のところ、USBキーボードは、同時押しは6キーまでしか対応していないキーボードがNキーロールオーバー対応でも、「全キー同時押し」に対応しない。なお、Shift等のモディファイアキー、Sleepなどの特殊キーは除く)。ただし、PS/2→USB変換器では最大10キー同時押しに対応したものが存在する。
  • USBキーボードでも、理論上は全キー同時押しに対応しうるが、対応品は確認されていない(対応するには、送信するデータサイズの増加と、全キー同時押しに対応したドライバが必要となる)。
  • したがって、現時点では、「全キー同時押し」に完全に対応したキーボードは、Nキーロールオーバー対応かつPS/2接続のキーボードのみ(PS/2接続のキーボードでも、ほとんどは「全キー同時押し」に対応していないことに注意)。
  • なお、自分のキーボードが同時押しに対応してるかどうかの実際のチェックには、キーボードの同時押し検出ソフトの項を参考にどうぞ。

「同時押し」対応キーボード一覧

  • 「全キー同時押し」対応(Nキーロールオーバー対応かつPS/2接続。理論上はUSB接続でも可能なはずだが現在のところ未確認)
  • 組み合わせを問わず10キーまで同時押し対応(Nキーロールオーバー対応、USB接続、コントローラーが特殊なもの)
  • 一部のキーのみ6キー以上同時押し対応
  • 組み合わせを問わず6キーまで同時押し対応(6キーロールオーバー以上対応かつUSB接続)
    • OWL-KB112MTEN(USB接続時6キーまで*1。なお、PS/2接続時は10キーまで*2
  • 組み合わせによって2~8キー前後
    • 上記以外ほぼすべてのPS/2接続のキーボード(Nキーロールオーバー非対応かつPS/2接続。同時押し可能な最大キー数はキーボードによって異なる)
    • DRKBCN(PS/2→USB変換器)による、Nキーロールオーバー非対応PS/2キーボードのUSB接続
  • 組み合わせによって2~6キー(Nキーロールオーバー非対応かつUSB接続)
  • その他・未調査のもの
    • Microsoft SideWinder X4 Keyboard : USBだが最大で26キーまでの同時押しに対応すると発表している(指の数を10本とするなら、事実上のnキーロールオーバー対応)。
    • Das Keyboard:Professional / Ultimate : "n-key rollover function allowing up to 12 keys to be pressed simultaneously"とのこと。詳細は未確認だが、情報によれば、NキーロールオーバーかつUSB接続で同時押し12キーらしい。どうやらデータサイズを増やしてUSBでの同時押し数増加を図っているようだが、そのためバッファリングないしレポートレートに問題があるらしく、高速打鍵時にキーを押したのとは違う順番で入力されてしまったり、Shiftキーを離した瞬間に打鍵した文字が大文字になってしまう、などの事例が挙がっているようだ。
      最近のバージョンの製品では普通のUSBの6キー同時押し仕様になっている模様。
      • これについての検証結果と原因がDas Keyboardの公式ブログで言及されており、一部で話題になった模様。要約すると、Das Keyboard III内部のスキャンレートが100ms(10Hz)と非常に遅く、このため高速打鍵時の入力に問題が発生していたという事である。参考までに、Nキーロールオーバー関連の技術を述べた米国特許番号4420744によれば、高速タイピングの事例としてだいたい20~30ms間隔での連続入力が想定されており、これを踏まえるならばコントローラー側も20ms以下で反応すれば概ね必要十分だが、このモデルはその水準を大幅に下回ってしまったため、問題が発生したと言える。
  • Logitech G15 Gaming Keyboard(旧モデル)*3
  • Logitech G11 Gaming Keyboard
    • 6-key rolloverらしいという報告もあるが、Logitechのモデルは右ctrl/shiftとカーソルキーの組み合わせで問題が発生するという報告も。

参考

  • このページは[マウス]入力装置ForPCActionGamer[キーボード]6スレの終盤でのレスをまとめたものです。また、USBキーボードにおける制約については、[マウス]入力装置ForPCActionGamer[キーボード]39, >>133さんのレスをまとめました。貴重なレスをくださった皆様には心よりお礼申し上げます。
  • ここでは書きませんでしたが、PS/2とUSBの負荷の問題なども論じられているので、興味のある方はこちらを参照してください。
  • なお、対応したキー限定であるものの、正確に同時押しが測れる(キーを離したことも認識する)ソフトとして、PianoBoardがあります。このソフトで全ての鍵盤を光らせることができれば、「全キー同時押し」対応と考えて良さそうです。
  • PS/2キーボードやUSBの仕様に興味のある方は、Computer-Engineering.orgで閲覧出来ます。

*1 公式サイトに8キーとあるのは、特殊キー込みの場合である。
*2 公式サイトには、Nキーロールオーバーとの記載もあわせて見えるが、実際はフルNキーロールオーバーなのかは未確認。
*3 新モデル(G15S)では、組み合わせにより2~6キーの同時押しにしか対応していない(【Logicool】キーボードを語ろう Part2【Logitech】, >>492)。なお、両者には外見上、旧モデルはバックライトの色が青・マクロキーは18個・液晶は開閉型、新モデルはバックライトの色がオレンジ・マクロキーは6個・液晶ははめ込み型、等の違いがある。