続 Nキーロールオーバー

Nキーロールオーバー - みねこあの続きです。


* * *


たろうさんより、ライターさんだけじゃなく メーカー(DHARMAPOINT)さんもこんな見解ですよとの追加のご報告。

これはあくまで弊社の見解であるが、Nキーロールオーバーとは、「キーを押した際にすべてのキーの入力を読み取れる機能」としている。同時押しという概念が存在するが本来は高速に打鍵をするユーザーのための機能であり、その意義は入力したキーを取りこぼすことなくシステムに伝えることである。

http://www.dharmapoint.com/node/2297

むー。

まずは個人的な意見。「仕様」の語意について「あくまで弊社オンリーの意味だけど..」と言うのはちょっと神経を疑います。だって仕様って、ユーザーが異なる会社間の製品を比べるときの物差しでしょう?業界の標準的な見解を調べるか、本当に統一がとれていないならちゃんと摺り合わせは必須じゃないかな。そういう風に思われるであろう事を無頓着にあっけらかんと書けてしまうあたりに、神経を疑ってしまいます。*1

さて、もちょっと客観的な感想としては、残念ながら「Nキー同時押しができなくても Nキーロールオーバー」という解釈は、かなり蔓延しているようですね。既に日本では 市民権を得ているレベルなのかもしれません。...orz

ありがとうございます > たろうさん


拝啓、海外のマニアさん

一方、海外の状況についてです。

USB インターフェイスで同時押し数を制限されたキーボードのことは 普通に 6KRO (6-Key Rollover) と読んでると考えて良いです。*2

他の表現では Iterface-limited NKRO と書くケースもあるみたいですが、6KRO と矛盾する表現ではありません。同じ状況を も少し説明的に表現すると・・・みたいな使われ方。「NKRO が Interface-limited の結果、最終的にはいわゆる 6KRO になる」みたいな感じです。

先のエントリーの繰り返しになりますが、前段で引用したような「rollover に同時押しという概念は含まれない」という解釈(以下、日本的解釈)は 今のところ見つけられてません。


以下、キーボードマニア的サイトからの引用(翻訳はかなり適当です)。まずは「メカニカルキーボード.com」(サイト名からしてマニア風が吹いてます)。

6KRO

Currently, the most commonly seen 'Key Rollover' functionality of USB interfaced keyboards. 6KRO means you can push up to 6 keys + modifier keys (CTRL, ALT, etc.) at once and the keyboard will recognize all of your key presses. 6 keys is usually more than enough since most aren't usually mashing 7+ keys simultaneously, even with video games. However, if you do utilize 7+ keys at once, you can always get a keyboard with NKRO (no key rollover).

現在、6KROを もっとも良く目にするのは、USBインターフェイスキーボードの「キーロールオーバー」機能でです。6KRO とは 6つのキー + 修飾ー(CTRL, ALT など)を一度に押下することが出来、キーボードがそれをすべて認識できることを意味します。普通のビデオゲームでは同時に7つ以上のキーをマッシュさせることは無いので、通常は 6キーで十分事足ります。あなたが 7キー 以上を一度に駆使することが無いならば、NKRO(No key rollover) キーボード として使うことができるでしょう。
7キー以上を同時に使いたければNKROのキーボードを入手してください。

Mechanical Keyboard Terminology

6KROは6キーまでしか同時押しできないけれど、7キー以上の同時押しを大抵の人はやらないし、そういう使い方の範囲ならば6KRO の利便性はN-Key rollover と遜色ないという話です。一方で、それでもこれはあくまで6KROであってNKRO ではない、という話でもあります。

日本的解釈の場合、「Nキーロールオーバーは高速タイピングのための機能だ」→「USBインターフェイス制限Nキーロールオーバーは、高速タイピングという用途においてフルNキーロールオーバーと遜色はない」→「つまりNキーロールオーバーの定義に同時押し可能キー数制限は含まれない」と論理展開するので、この違いは興味深いです。*3


ちなみに NKRO の項目では

NKRO

Short for 'No key rollover', NKRO means you can press as many keys as you want at the same time and all of them will go through. It is the 'Unlimited' version of Key Rollover. Originally only available through PS/2 interfaces, brands such as Ducky have created keyboards that can offer NKRO through both the PS/2 and USB interface.

「No key rollover」の短縮名。NKROは、好きなだけの数のキーをいつでも押すことができて、そのすべてが(キーボードからコンピュータに)届くこと。Key Roollover の アンリミテッドバージョン。元々は PS/2インターフェイスだけで利用できたが、Ducky などのブランドが PS/2 でも USB でも 入力が NKRO で通過する キーボードを作りました。

Mechanical Keyboard Terminology

のように記述しているので、やはりこちらも 6key同時押し制約のある USB キーボードは N-Key rollover ではないとの立場で書かれています。(NKRO を "No key rollover としているのが、やや気になりますが)


次は、DESKTHORITY WIKI さん。入出力デバイス関連全般wiki(但しメカニカルキーボードがご贔屓)的なページ。

Interface-limited NKRO

The USB Human Interface Device (HID) protocol fully supports N-key rollover. However, the compatibility version of HID that all present systems implement limits USB keyboards to reporting a mere six regular keys together with four modifiers. Additional keys pressed beyond the limit will generally cause some of the other keys to be dropped.

USB ヒューマンインターフェイスバイス(HID)プロトコルは、N-Key rollover をフルサポートしています。但し、すべての既存システムに互換のあるバージョンのHID で実装された制限のあるUSB キーボードでは、たかだか6の通常キーと4つの修飾キーを一緒に通知することしか出来ません。この限界以上にキーが押された場合、多くの場合、他のキーを取りこぼさせる原因になります。

Many USB keyboards implement workarounds to bypass this limit; the most common trick is to simulate multiple endpoints, e.g. the keyboard pretends to be a USB hub with several keyboards attached. When more than six keys are pressed simultaneously, the keyboard controller simulates up to six keys coming from one of its virtual keyboards, and the rest coming from its other virtual keyboards.

多くの USB キーボードはこの制限をバイパスする回避策を講じてます。一番多いトリックは、複数のエンドポイントを偽装する方法ですね。つまりUSBハブに接続された複数のキーボードのフリをします。で、6キー以上が押された時、キーボードコントローラは 6キーをあるバーチャル・キーボードから来たように、残りを他のバーチャルキーボードから来たように偽装します。

These sorts of tricks lead to compatibility issues with certain systems; see NKRO-over-USB issues for a workaround to this problem.

これらのトリックは特定の環境で互換性の問題を生じます。この問題を回避する方法については、NKRO-over-USB のページを参照してください。

2KRO, 6KRO and others

Sometimes, key rollover is described using a number. This practise is somewhat confusing because it means different things in different contexts.

時には key-rollover を 数値をつかって表現します。これらは文脈ごとに異なる意味あいとなるため、この用語は少々混乱しています。

2KRO is often used to describe a keyboard with blocking, and is meant to be read as "any combination of two keys are guaranteed to work, and some combinations of three or more keys will work, but others will not".

2KRO は主にキーブロッキングの文脈で登場し「2つのキーの任意の組み合わせは動作は補償するけど、3キー以上の組み合わせの幾つかは動作するけど、幾つかは動作しない」という意味です。

6KRO is often used to describe an interface-limited NKRO keyboard, and is meant to be read as "any combination of up to six keys are guaranteed, but no combinations of seven or more will work".

6KROは主に Interface-limited NKRO キーボードの文脈で登場し「任意の組み合わせの6キーの入力は補償されるけれど、7つ以上の組み合わせでは動かない」という意味になります。

Some rollover quantities greater than 6, such as 12KRO, 18KRO or 22KRO are used to refer to heavily optimized matrices, or interface-limited NKRO keyboards that have got around the 6 key limit.

6KRO以上の、12KRO、18KRO、20KRO といったものは、重最適化マトリクスの文脈で用いられるか、6キー制限を回避した Interfece-limited NKRO キーボードの文脈で用いられます。

Rollover, blocking and ghosting - Deskthority wiki

という風に、あちらの、すくなくともマニアの間では 日本でいう「N-Key rollover ※但し USBなので同時押しは6キーまで」的キーボードは、単純に 6KRO Keyboard になりますよ、というお話でした。


前略、日本のディープなマニアさん

ひるがえって、日本のマニアさんはどうか。

ゲームマニアさんは前回紹介したゲーム系サイトの状況をみるに、残念な事になっている可能性が高いと推測されますので、なるべくハード的な意味で濃そうなキーボードマニアさんにあたりをつけまする。というわけでこちら様。

キーボードを自作して満悦感に浸るスレ

いやぁ、スレタイからして特濃ですね。さっそくガツッと引用です。

102:不明なデバイスさん:2010/12/10(金) 21:38:34 id:LwTUEArG
USBでNKROできました。

あんまメリットないね。
NKROを生かせるなんかおもしろアプリケーションでもあるといいんだけど。


103:不明なデバイスさん:2010/12/10(金) 23:03:35 id:r3yOOp5n
猛烈なメリットがあったらずっと前から NKRO が標準になってるだろうしね
2KRO が標準だからこそソフト側もそれで問題が出ないような UI を作ってきたという面もある


104:不明なデバイスさん:2010/12/10(金) 23:42:00 id:LwTUEArG
普通に2KROで十分だしね。
NKROキーボードを求めてる人も必要なのはまともなキーマトリクスであって
本当にNKROである必要はない場合がほとんどだし。


105:不明なデバイスさん:2010/12/13(月) 02:21:02 ID:/5gBlmXK
NKROならどこに修飾キーを割り当てても問題が起きないってのはゲーム以外で使える利点
自作キーボードならマトリクスごと入れ替えするだろうから意味無いかな


106:不明なデバイスさん:2010/12/13(月) 10:22:40 id:lWm5m3jC
それはNKRO自体の利点じゃなくて、ダイオード入りのゴーストフリーのマトリクスの利点だと思う。
まともなメカニカルキーボードならNKROでなくても、そういう問題はない。

というように、NKRO / 6KRO などの用語の使い方は海外のマニアさんと同じです。(nキー同時押しできてこそのnKRO)


107:不明なデバイスさん:2010/12/14(火) 09:42:06 ID:4v6BFhbX
>>102

>>90 にあるようにHIDの制限があるはずなんだけど、どうやって回避してるのか気になる。
108:不明なデバイスさん:2010/12/14(火) 10:46:49 id:i5BdRUdW
>>107
よくきいてくれたなw

8byteのかわりに16byteレポートを使う。
そのなかで8bitsで8つのmodifiersを、残りの120bitsで120キーを表現する。
つまり一回のレポートで128キー送ることができる。
ちなみに、日本でいうところの"同時押し"を含んだ意味でのNKROが実現できる。

今のところ、すくなくともWindows(2000, XP, 7), Linux(2.6)においてOS標準のドライバで
以上のことが可能なことを確認している。Macもおそらくいけるだろう。

特別なドライバなしで実現できてるところ、これ重要ね。

ふう。いいたいことはいったぞw


109:不明なデバイスさん:2010/12/14(火) 10:53:37 id:i5BdRUdW
これ以前のファームウェアでUSBで6KROを超えてるビデオね。わかりづらいけど。
http://www.youtube.com/watch?v=jMjczjhelWM

これは64byteレポートで8modifiersと62キー送ってる。効率悪いバージョン。
今は効率よく、16byteでやってる。


110:不明なデバイスさん:2010/12/15(水) 09:13:34 id:lslOm7Ov
>>108
すげえじゃねえか!
使い道は思いつかんけど


111:不明なデバイスさん:2010/12/16(木) 07:15:49 id:XnnVzNNn
>>108
電子工作がよくわからない俺にもう少し説明してくれ。
自分で回路設計してコントローラを作ったってこと?


112:不明なデバイスさん:2010/12/16(木) 13:07:00 id:Imdg8128
回路設計どころか半田付けもほぼしてない。
完成品のマイコンの基板を買って、キーボードコントローラとしてつないでる。
そのマイコンに独自のファームウェアをプログラムしてる。

「ちなみに、日本でいうところの"同時押し"を含んだ意味でのNKROが実現できる。」あたりの言い回しが興味深いです。しかし、128KRO...。何てもの作ってるんでしょう。

113:不明なデバイスさん:2010/12/16(木) 14:54:29 id:xT26GKXN
これ OS からは何として認識されてるの?
キーボードじゃないよね?
無設定デフォで使えるわけじゃないならあまり意味が無いんじゃないの?


114:不明なデバイスさん:2010/12/16(木) 14:55:57 id:Fut/Vd3m
>>108
geekhackの記事見たけど、すごいのう。なんだか良くわからんが…。
Full Speedでつなげば、普通にパケット大きくすればいいだけなのか。


115:不明なデバイスさん:2010/12/16(木) 15:35:57 id:Fut/Vd3m
>>113
標準ドライバで使えるってことだから、キーボードで認識されてるんでないか?


116:不明なデバイスさん:2010/12/16(木) 17:32:25 id:Imdg8128
>>113
普通にHIDキーボードだよ。HID仕様の規定ないで作ってるから。
最近のOSなら標準のドライバでいける可能性がたかいと思う。
>>108 みてくれ。

>>115
です。

USB Full Speed モードでつないでパケットを普通に大きくすれば、6キー以上の同時押しも出きるのですね。ふみふみ。けれど、

117:不明なデバイスさん:2010/12/16(木) 23:30:17 id:qWlqSeQn
>>112
HHKとかに乗ってるICを乗せ換えるだけで動くの?

これでいけるんだったら、なぜM$のゲーミングキーボードは複数個載せの力技でやったんだろう。

>>110
速記キーボードは20個のキー同時押しを認識する必要があるのだよ。


118:不明なデバイスさん:2010/12/17(金) 02:52:23 ID:F/Qk4N4W
>>117
東プレスイッチとかまともなメカニカルスイッチのキーボードに関してはそういうことですね。
メンブレンは構造的に不可能です。(Sidewinder X4は特殊なメンブレンなので例外)
詳しくはここ見てもらえればだいたいのことはわかると思います。
http://geekhack.org/showwiki.php?title=Island:12047


X4については実物がないので、以下の記事を読んでの推察です。
http://www.4gamer.net/games/044/G004485/20100413050/

OS上で2つのキーボードとして見える件のことをいってるのだと思いますが、
これはBIOS上での使用、互換性を考えてのことですね。これは間違いないです。
BIOS上ではboot modeといって、事実上8byteのレポートしか使えないので、
この8byteのキーボードを用意する必要があります。

ただ、なぜ17KROにしたのかというのはよくわからないですね。
このX4の開発者がフォーラムで、X4のメンブレンは性能的にはNKRO可能だと
明言していたので、互換性を優先したのかもしれないし、Windowsのバグを回避するための処置かもしれないです。
(バグとはいってないけど開発者もWindowsのUSBキーボードまわりの問題は認めてました。)


実は私のキーボードもOS上では2つ(8byteと16byte)に見えます。
やはりboot modeをサポートするためです。ひとつにすることも可能ですが、
互換性の問題で安全を優先するとこの構成になります。

MSは自動で17KROまでいくようですが、私の場合は6KROとNKRO(120KRO)を
特定の組み合わせのキーを押すことで切り替えてます。


119:不明なデバイスさん:2010/12/23(木) 19:46:20 ID:16Xc5Opo
このスレの気持ち悪い奴をわかりやすいように抽出
id:LwTUEArGid:i5BdRUdWid:Imdg8128=ID:F/Qk4N4W


120:不明なデバイスさん:2011/01/03(月) 22:53:12 id:RhVaOZ5B
気持ち悪いってのも酷い言われようだな。

128KROできてる唯一の人なんだから、別にいいと思うけど。

まあ、漏れはそもそもNKROに魅力を感じないんだが。
同時押しも、キーボードレベルで認識して、順番にPCに送ればいいだけだし。
例えば、漏れはBat keyboardのクローンを作って使ってるけど、
これは7キー同時押しがあるけど、PCにはmodifierキーを除けば1キーずつ送ってる。

boot mode との互換性ですね。って、Windows のバグってなんじゃろ。

121:不明なデバイスさん:2011/01/03(月) 23:09:56 id:EJ8ya2dl
俺なら、USB HUBを多段して
6キーずつ20組ぐらいをグループにして作る
HUBの遅延?知るかそんなもん


122:不明なデバイスさん:2011/01/17(月) 00:12:37 id:QbHyCKqX
16byteの情報量でキーコードそんなに送れるわけないだろ、常識敵に考えて


123:不明なデバイスさん:2011/01/18(火) 00:53:40 id:hfKkKzIl
HIDにはreport descriptorというものがあってだな。
16*8で128キー遅れるんだよ。


124:不明なデバイスさん:2011/01/18(火) 01:22:51 id:Iou7k08f
report descriptorそのものは関係無い


125:不明なデバイスさん:2011/01/18(火) 01:37:49 id:hfKkKzIl
report descriptor で通常とは違う定義してるから1bitあたり1key送れるようになる
と理解してほしかった。
もちろんreport descriptorでキーコードを送るわけではない。


126:不明なデバイスさん:2011/01/18(火) 04:57:43 id:RxmsUSxH
COM使うキーボードってどういう仕様なんですかね?
特殊用途向けみたいだけどPS/2並に細かくは無理なキーボードもどき的なものなのでしょうか?


127:不明なデバイスさん:2011/01/21(金) 00:32:08 id:bD8BuVqO
>>123みたいなやり方で多くの情報送れるの?

IntelのICH、Via、NECとかUSBのコントローラチップによっては
正しく送信できないとかあったりしないの?


128:不明なデバイスさん:2011/01/21(金) 11:57:15 ID:2TFbO4zu
規格に準拠してるわけだから送れる。個々のコントローラにバグがあるかは知らない。
すくなくともUSBのレベルでは送れる。ただそれをただしく扱えるかはOSドライバ次第。
WindowsLinuxでは標準ドライバで動作するを確認している。

ちなみに、USBでNKRO全キー同時押しのキーボードも製品として出ている。
それはMacで問題があるみたいだが、おそらくドライバの問題だと思う。

ほへー。やば、だんだん話についてけなくなってきたり。

129:不明なデバイスさん:2011/01/25(火) 15:16:21 id:vVhzl+23
>>128
例のキーボード作ったって人?

http://wikiwiki.jp/fpag/?DRKBCN
PCアクション板の10キー以上押せない件について説明して欲しい

2008年だから、まだXPが主流なのかもしれないけど


130:不明なデバイスさん:2011/01/25(火) 21:18:09 id:Angv/mJ1
全部読んでないけど、そのページでも言及されているように
WindowsのHIDドライバのバグだと思う。Linuxなら問題ないんじゃないかな。

バグの存在はMSのハードウェア部門?の人も認めている。
この人がOS部門に報告したのでFIXされる予定らしい。がまだ直ってないと思う。
http://forums.anandtech.com/showpost.php?p=30873364&postcount=17

実はWindowsはこのバグせいで、6KROさえ完全にサポートされてない。
ある状況下でゴーストが発生するのがこのビデオでわかると思う。このゴーストはキーボード自身の
問題ではなくWindowの問題。
http://www.youtube.com/watch?v=cpIDsVrWNOs

ちなみにこのバグを回避する方法もあるので、それを使えばWindowsでもNKROを実現可能である。
Noppooはこの方法を使ってNKROを実現しているし、自分のキーボードもWindowsLinuxでNKROを確認している。


131:不明なデバイスさん:2011/01/26(水) 14:39:16 id:PPf8zprc
まぁ普通の人は指が10本しかないから、「バグじゃなくて仕様です」と
言われても納得するしかないと思うが。


132:不明なデバイスさん:2011/01/29(土) 03:38:03 id:xKSBDLvu
ここの人すごいな。
WindowsのHIDドライバのバグなんて知らなかった。
(後略)

ここの人すごいなー。


ラムネとレモネード

まぁ、2008年までは日本でも USBキーボードは 6キーロールオーバーだ、みたいに Wikipedia に書かれていたわけですから、普通に考えて国内解釈がどんどんズレていったという事なんでしょう。海外情報とか平気で読み込んだりする、「Nキーロールオーバー」じゃなくって「NKRO」と略記をガンガン使うような層のキーボードマニアあたりだと、すくなくとも去年レベルでは意味が保たれている様子。

どこらへんが震源地で、どのように拡散していったかはよくわかりません。なんとなくゲーム畑な気がするのですが、気がするだけですし、なんか同時多発的っぽい雰囲気もありますね。たぶん2chのいろんな板のログあたりをもっとちゃんと漁ったりとかすれば追跡できるとおもうのですが、さすがにその気力はわきませぬ*4

たった5年でドウシテコウナッタというヤルセナサはあるのですが、この状況では取り返しは付かないかもなぁ、と思います。日本で USB キーボードは 6-Key rollover だよ、といっても、もう新たな混乱しか産まない予感がプンプンします。

ですのでもう 「NKRO(N-Key rollover)」 と 「Nキーロールオーバー」は異なる言葉だよ、でいいんじゃないかな、と思います。「レモネード」と「ラムネ」みたいな感じで、日本語らしいといえばそうかもですね。(さじなーげたっ)


というわけで、この話題はこのへんで。

おまけ

ところで、先ほどの DHARMAPOINT さんのページには、もう一箇所 Nキーロールオーバーの説明があって、それがなかなか素敵でした。

Nキーロールオーバー:N=虚数であることから任意の数=0すなわち組み合わせを問わず入力が可能な動作

http://www.dharmapoint.com/node/2297

N=虚数ですとっ!!

・・普通に考えれば自然数の単なる誤植ですが*5、不意打ちのような キーボードと虚数の組み合わせに中二理系心が刺激されます。リーマン球面とか膜宇宙とか出できそうなハードSFのフレーバーがふわっと香ります。《神のキーボード》とか、世界は神によって7日間でコーディングされたのだよ的な ・・って、ちょっとラノベ入ってきた。

*1:このエントリーを書き始めた動機が、最近目にした「Nキーロールオーバー」って、これオレオレ定義( (c)JavaBlack)じゃない?・・・なのですが、まさか「俺定義ですが、何か?」と言われるとは思わなんだなぁ。

*2:調査が足りていないので 断言すると足元すくわれちゃいそうですが

*3:日本的解釈は、わたしには前提から論理展開のなにからなにまでおかしく感じますが・・・。

*4:お団子汚染とかありますし

*5:でもその後につづく「任意の数=0すなわち...」あたりがみょーな怪しさを醸し出していて..