モードAしか使っていませんが、現状ではturbo系にしか対応していません。非turbo系では動作確認出来ていないのと、非turbo系キーボードでは「SHIFT/CTRL/GRPH/カナ/CAPS」を単独で打鍵した場合に打鍵が通知されないためです(SHIFT を押下しても通知されず、続けて A を押下した際に初めて SHIFT + A が通知される)もしかしたら特に手を入れなくても現在の処理でも非turbo系でそのまま動くかもしれませんが。
なお今のところモードBに対応する予定はありません。
もっとも重要な仕様。
SHIFT, CTRL, CAPS, カナ, GRAPH キーを除いて、他のキーは押しっぱなし動作が出来ません。キーを押した瞬間に、アダプタがPCにむけて「キーON&キーOFF」を通知します。これはキーボード自体の仕様からくる制約です。
X1のキーボードは (5つのmodキーを除いて) キーを押した際に信号が来ても、キーを離した際は何の信号も来ないのです1 。なので、キーOFFの信号はアダプタ自身が内部で生成しています。
カーソルキーなんかはカーソルを移動させたい分だけキーを連打して下さい。
CAPS LOCKとカナは例によってプッシュロックキーです。アダプタの設定で対応可能 (キーを押下した際にON&OFFを通知、キーを開放した際にもON&OFFを通知)ですが、当然ながら押しっぱなし動作が出来なくなります。
X1で使う予定がないのであれば、キーを分解してロックピンを取り外してしまうことをお勧めします。
Scancode
上記のスキャンコードはアダプタが内部で定義しているもので、キーボードが実際に発生させている信号とは無関係です。
前述のとおり、同時押し判定が出来るキーは 「CTRL, SHIFT, GRAPH, CAPS, カナ」の5つに限られます。他のキーは同時押しの判定が出来ません。同時押し判定が出来ないキーを複数同時に押しても、単に順番に打鍵したように処理されます。
例えば「SHIFT + CTRL + ESC」は正しく処理出来ますが、「ESC + A」は「ESCのON&OFF→AのON&OFF」 という風に処理されます。
XFERが同時押し判定可能なキーじゃないのが痛い・・・
CTRL同時押しの例外
ScanCode | input1 | input2 |
68h | Ctrl + C | Ctrl + BREAK |
69h | Ctrl + H | Ctrl + INS/DEL |
6Ah | Ctrl + I | Ctrl + HTAB |
6Bh | Ctrl + M | Ctrl + ENTER |
6Ch | Ctrl + [ | Ctrl + ESC |
上記の5パターンについて、input1とinput2をアダプタは判別出来ません。例えば Ctrl+CとCtrl+BREAKはキーボードから全く同じ信号が返ってくるため、アダプタはどちらの入力だったのか判断出来ません。
そこでこの5パターンに限り、元のスキャンコードとは別のスキャンコード(68h~6Ch)を割り当てています。例えば、
ScanCode: 68h → KeyCode: 06h
と定義すると {Ctrl + C} or {Ctrl + BREAK} は「C」のキーに変換されて、結果として「Ctrl + C」がPCに通知されます。一方、
ScanCode: 68h → KeyCode: 2Ah
と定義すると {Ctrl + C} or {Ctrl + BREAK} は「BREAK」のキーに変換されて、「Ctrl + BREAK」がPCに通知されます。
デフォルトの定義は太字側の設定にしていますので、「よく利用するアプリで Ctrl + I を多用する」ような場合は設定を変更して下さい。
ダウンロード
- モードAの場合 [↩]