親指シフト変換器7 Ver4

last updata : 2000頃

PICの内部処理

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に対応しています。

フルキー側
刻印コード刻印コード刻印コード刻印コード刻印コード
ESCESC英字英数英小文字カタカナSHIFTShiftCtrLCtrl
11 QQ AA ZZ ALTAlt
22 WW SS XX タブTab
33 EE DD CC 親指左※2
44 RR FF VV 親指右※2
55 TT GG BB 空白space
66 YY HH NN かな漢字※1
77 UU JJ MM 無変換無変換
88 II KK ,, 変換変換
99 OO LL ..
0※1 PP ;; //
-- :: 後退BS _\
^^ [[ 取消ESC SHIFTShift
\\ 改行Return
]]
テンキー側
刻印コード刻印コード刻印コード刻印コード
** // ++ --
77 88 99 =※1
44 55 66 ..
11 22 33 RETEnter
00 000※1
カーソルキー側
刻印コード刻印コード刻印コード刻印コード刻印コード
実行Enter
半角/全角半角/全角削除Del 挿入Ins
前行Page Up HOMEHome 次行Page Dwon
漢字辞書※1 単語抹消※1 単語登録※1
ファンクションキー側
刻印コード刻印コード刻印コード刻印コード刻印コード
PF1F1 PF2F2 PF3F3 PF4F4 PF5F5
PF6F6 PF7F7 PF8F8 PF9F9 PF10F10
PF11F11 PF12F12 PF13  PF14  PF15ScrllLock
PF16NumLockPF17End PF18WinPF19AppPF20Alt
その他のキー
刻印コード刻印コード刻印コード刻印コード刻印コード
SYSREQ※3 PAUSEBREAK COPYPrint Screen
EXT1WinEXT2AppSCROLL LOOKScroll LockHOMEHOMEENDEND

※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のページに書いた通りです。