キーボードとの通信が出来るようになったので、ザウルスとのインターフェースの検討をしてみます。
ザウルス側はジョイパッドと同様にトラップさん作のser_code_ksimを使うことにします。
ここで言葉の定義をしておきます。似ている言葉なので混乱しないよう…(汗)
PS/2キーボードのキーを押したときにどのようなスキャンコードが出力されているのか、テクニカル・リファレンスを参照してみます。
キーを押したときのコード表が3種類あり、キーボードにコマンドを送ると切り替えることができます。
さて、どのようなコードが現れているのか?まとめてみると…
| キー | スキャンコード | ||||||
|---|---|---|---|---|---|---|---|
| Scan Code Set 1 | Scan Code Set 2 | Scan Code Set 3 | |||||
| Make | Break | Make | Break | Make | Break | ||
| 1(FullKey) | 02 | 82 | 16 | F0 16 | 16 | F0 16 | |
| 1(TenKey) | 4F | CF | 69 | F0 69 | 69 | F0 69 | |
| End | *1 | E0 4F | E0 CF | E0 69 | E0 F0 69 | 65 | F0 65 |
| *2 | E0 AA E0 4F | E0 CF E0 2A | E0 F0 12 E0 69 | E0 F0 69 E0 12 | |||
| *3 | E0 2A E0 4F | E0 CF E0 AA | E0 12 E0 69 | E0 F0 69 E0 F0 12 | |||
|
*1 (Base Case or Shift+NumLock) *2 (Shift Case) *3 (Num Lock on) |
|||||||
書いてて訳わからなくなりました…
Scan Code Set 1 はスキャンコードの最上位ビットをMake/Breakの識別に使用しており、ぱたぱたと同様です。
Scan Code Set 2 と Scan Code Set3 はBreak時にプレフィックス(F0)が追加されます。
ぱっと見、Scan Code Set1がぱたぱたと同様のコード構成になっているので、何もせずに転送すればよさそうですが…
Endキーなど、一部のキーはプレフィックス(E0)が追加されます。また、NumLockやShiftの状態で出てくるコードが変わってます。…面倒くさっ。(汗)
テンキーの使用を制限すれば対応は容易ですが、付いてるキーは使えるようにしたいものです。
Scan Code Set 3は全てのキーに独立したスキャンコードが割り当てられており、プレフィックスでキーのBreakを識別しています。プレフィックスの処理をPICで行えば、全てのキーを独立したコードで送れそうです。これでもテンキー周りの扱いは一筋縄では行かないようですが。
今回はScan Code Set 3を使ってみることにします。
さて、ザウルスに送るキーコードですが、ser_code_ksimの設定ファイルで何とでもなるので、基本的にスキャンコードを細工せずに送るだけにします。
ただし、一部キーのスキャンコードは0x80以上なので細工が必要です。
それと、テンキーの扱いをどうするか…まぁ、後回しにしますか。
リナザウ関係のゴミ置き場 | 前ページ | 次ページ