PICの中でどんな変換が行なわれているか
親指シフトキーボードのキースキャンコードを受けて106(109)キーボードのキースキャンコードに変換しています。 基本的にはそれだけです。ただし色々小細工を施しています。
親指シフトキーボードについて
FM-TOWNSの赤本やFMRの白本と通称呼ばれている解説書が有ります。 それにキースキャンコードに付いても解説が有ります。 しかしその内容は、パソコン本体の内の動作内容です。 キーボードのインターフェース(SIOに依る通信)も書いてあるので私自身で調べました。
調べた内容をここに載せるのは問題になりかねないので止めときます。 後発のキーボードの通信らしくキーの抜けを抑えられる様になっています。 ただ、全てのキースキャンコードを処理するとPICのプログラム領域を使い切ってしまうので 一部無視しています。
ATキーボードについて
ATキーボードのインターフェースについては、IBMのオープンアーキテクチャの頃の産物なので 詳細な解説書が有ります。物凄く良く考えられた通信方法です。
最初は、理解できず通信の真似をしてたのですが..
色々試してる内に受信拒否、受信中断、再送が自由にでき通信のビット間隔も倍にずれても 問題がでないと言うマイコンを使う通信にはすごく適している事が判りました。ATキーボードには、3種のスキャンコードがあります。 親指シフト変換器では、すべてサポートすることはできません。 MOS/V や Windowsで使用されるScan Code Set2 のみを使用します。 スキャンコード変更コードが来ても変更された振りをするだけで実際には変わりません。
通信について
oya2at Ver Lでは、タイプマチック(リピート)の変更に対応しました。 Ver L以前では、レート固定でしたが親指シフト側とAT側の処理が完全に非同期にできたので 自由に設定できる様になりました。
変換内容
キーが1対1に対応している場合は単純に変換するだけですが。 90%位は1対1に対応しています。
フルキー側 | |||||||||
---|---|---|---|---|---|---|---|---|---|
刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード |
ESC | ESC | 英字 | 英数 | 英小文字 | カタカナ | SHIFT | Shift | CtrL | Ctrl |
1 | 1 | Q | Q | A | A | Z | Z | ALT | Alt |
2 | 2 | W | W | S | S | X | X | タブ | Tab |
3 | 3 | E | E | D | D | C | C | 親指左 | ※2 |
4 | 4 | R | R | F | F | V | V | 親指右 | ※2 |
5 | 5 | T | T | G | G | B | B | 空白 | space |
6 | 6 | Y | Y | H | H | N | N | かな漢字 | ※1 |
7 | 7 | U | U | J | J | M | M | 無変換 | 無変換 |
8 | 8 | I | I | K | K | , | , | 変換 | 変換 |
9 | 9 | O | O | L | L | . | . | ||
0 | ※1 | P | P | ; | ; | / | / | ||
- | - | : | : | 後退 | BS | _ | \ | ||
^ | ^ | [ | [ | 取消 | ESC | SHIFT | Shift | ||
\ | \ | 改行 | Return | ||||||
] | ] | ||||||||
テンキー側 | |||||||||
刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード | ||
* | * | / | / | + | + | - | - | ||
7 | 7 | 8 | 8 | 9 | 9 | = | ※1 | ||
4 | 4 | 5 | 5 | 6 | 6 | . | . | ||
1 | 1 | 2 | 2 | 3 | 3 | RET | Enter | ||
0 | 0 | 000 | ※1 | ||||||
カーソルキー側 | |||||||||
刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード |
← | ← | ↑ | ↑ | → | → | ↓ | ↓ | 実行 | Enter |
半角/全角 | 半角/全角 | 削除 | Del | 挿入 | Ins | ||||
前行 | Page Up | HOME | Home | 次行 | Page Dwon | ||||
漢字辞書 | ※1 | 単語抹消 | ※1 | 単語登録 | ※1 | ||||
ファンクションキー側 | |||||||||
刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード |
PF1 | F1 | PF2 | F2 | PF3 | F3 | PF4 | F4 | PF5 | F5 |
PF6 | F6 | PF7 | F7 | PF8 | F8 | PF9 | F9 | PF10 | F10 |
PF11 | F11 | PF12 | F12 | PF13 | PF14 | PF15 | ScrllLock | ||
PF16 | NumLock | PF17 | End | PF18 | Win | PF19 | App | PF20 | Alt |
その他のキー | |||||||||
刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード | 刻印 | コード |
SYSREQ | ※3 | PAUSE | BREAK | COPY | Print Screen | ||||
EXT1 | Win | EXT2 | App | SCROLL LOOK | Scroll Lock | HOME | HOME | END | END |
※1は、一意のキーとならないキーです。(複数のキーコードが出ます。)
※2は、親指シフトキーです。
※3は、その意味のキーコードが出力されます。(本来は複数のキーがされた時のコード)
FMT-KB207のコード変換表
PICとソフトのページの「特殊なキー」が違うって事になりますが他にも幾つかあります。 [SYSREQ]キーもFM-TOWNSの親指シフトキーボード(KB207)には、単独で存在しますが、 ATキーボードでは、[ALT]+[PrintScreen] → [SYSREQ]になります。 と言う事でそれに合わせたスキャンコードを出力しています。
FMT-KB206では、PAUSEキーがBREAKキーになっています。 その他は、キーが少ないだけで同じです。
特に問題なキー
[親指左],[親指右],[0]キーとテンキーの[=],[000]キーです。
VerHで[0]キーとテンキーの[=],[000]キーまでは解決しました。 簡単に処理の方法を言うと複数回キーを押された様に見せかけるのです。 [Shift]+[0]が押された時は、[Shift]を離した[@]を押した[Shift]を押した と言う具合に。
[親指左],[親指右]は、独立したキーに見せかけたいのですが旨くいっていません。 親指ひゅんQのページに書いた通りです。