|
![]() |
2003-2-13 更新 |
遠い昔,いにしえのPC-9800シリーズが日本を席巻していた頃,jfkeyというプログラム(手前味噌^^;)がありました。これはキーボードの操作性を細かくカスタマイズするデバイスドライバで,その目玉機能としてキーのオートリピートを高速化することができました。時は過ぎ,PC/AT(互換機)の時代になりましたが,いろいろ面倒くさいPS/2キーボードの仕様に圧倒され(ちょっと誇張),BIOSを乗っ取って実装するだけの技量を欠いており,さらには,Windows時代の到来についていけず,VxDの学習もままならず,PC/AT版jfkeyを作ることはできませんでした。それでもやはり,キーリピート速度の高速化の野望は持ち続けていました。今となっては,DOS/Win95系/WinNT系/Linux/BSD/Solaris等々OSの選択肢も多岐にわたり,ソフトウェアで実現するには無理な状況になってしまいました。そこで,ワンチップマイコンを使ってハードウェアキーボードアクセラレータを作ることにしました。
言うまでもないかもしれませんが,オートリピートについて一応おさらいしておきます。キーを押しっぱなしにして少し待つと,その文字が連続して入力される仕組みです。IBM用語で「タイプマチック」とも呼ばれます。オートリピートの速度は,Windowsではコントロールパネルのキーボードのプロパティで設定できます。Linuxならkbdrateコマンドで設定できます。
リピート速度を決定する値にはディレイとレートがあります。ディレイは1文字目が入力されてから2文字目が入力されるまでの待ち時間で,単位はms(ミリ秒)です。250msから1000msの範囲で4段階で指定します。レートは2文字目以降が入力される速度で,単位はcps(毎秒n文字)です。2cpsから30cpsの範囲で32段階で指定します。PC-9800シリーズでは,ディレイは500msレートは25cpsに固定されており,設定を変更することはできません。
PC互換機のキーボードにおける最高速設定にしても250ms/30cpsしかありません。PC-9800の標準より速いとはいえ,私個人的には200ms/75cpsくらいが理想ですので,まだまだもの足りません。今回制作したQuckey!はPC本体とキーボードを仲介し,キーボードが生成したオートリピートを無視し,Quckey!が内部でリピート処理を行います。
マイコンは日立H8/3664を使用することにします。秋月電子通商のキットAKI-3664ですが,これには2種類あって,試作機ではシュリンクDIP版,本番ではQFP版を使いました。どちらでも全く同じファームウェアで動作するようになっています。それにしてもQFP版,素晴らしいです。基板面積比にして,シュリンクDIP版の約3分の1しかありません。クロックもMAX232も実相済みでこのサイズですから,PICやAVRより使いやすいです。
![]() |
![]() |
![]() |
|
概要 |
開発環境 |
試作機 |
余談ですが,上の写真のキーボードは,アルプス製ノンクリックメカニカルスイッチを採用した,お気に入りの106キーボードです。i486時代のDELLの製品に付属していたレガシィフェチ御用達のキーボードです。その感触はPC-9801DX/RX/DA/RAやPC-9801VX/VMのキーボードにこそ及びませんが,それでも現在の水準から比較すると,至高の打鍵感が得られる一品です。
さらに余談ですが,上の写真のPCは,秋葉原の露店(?)で購入したパナソニックの古いノート,PRONOTE CF-35です。このマシンは高速CPU Pentium133MHz(笑)を搭載し,PCカードスロットも2基,さらにUSBまで付いていて,マイコン工作の開発に必須のシリアルポートも付いている,ある意味理想的な実験用使い倒しマシンです。最新のPCはUSB化が進んでいて,特にノートではシリアルポートもPS/2コネクタもついてないこともあり,レガシィフェチとしては行く末に不安が募ります。
![]() |
|
回路図 |
H8/3664キットを組み立てます。と言っても,基板は完成品ですので,ピンヘッダをハンダ付けするだけです。親基板には裏返して装着しますので,ピンヘッダは部品面に取り付けます。
親基板の加工は少し面倒です。ケースにあわせて不要な部分をハンドニブラで切除します。キーボードコネクタの取り付け穴は電動ルータやダイヤモンドヤスリを使いました。
![]() |
![]() |
![]() |
|
H8/3664キット |
基板全貌 |
配線 |
ケースは前回の作品で使ってみて大変気に入った,タカチ電気工業製のSS-N90を今回も採用します。加工も前回とほとんど同じです。
ケーブルの基板用コネクタはシングルラインICソケットにハンダを流し込んで作った,お手軽コネクタです。
ケースの板厚が3mmもあるので,これにぴったり合うゴムブッシュが入手困難で,手持ちが1個しかなかったため,悩んだ末,2台目は自己融着テープを太巻きにしてゴムブッシュ代わりにしました。
![]() |
![]() |
![]() |
![]() |
|
ケースの加工 |
ケーブルの末端処理 |
ケーブルの結線 |
ケーブルの引き出し |
開発環境はLinuxを使用します。コンパイルと書き込みに使う開発用PCのほかに,書き込み中に電源を供給するため,PS/2コネクタを有したPCが必要です。1台しか無い場合は別途電源を用意する必要があります。
| quckey.tar.gz (2003-02-13) |
|
| 旧バージョン |
quckey/quckey.motというファイルがコンパイル済みファームウェアです。これをH8/3664に書き込んでください。改造する場合には再コンパイルのためにh8300-hms-gcc一式が必要となります。同梱のMakefileはDebian GNU/Linuxでコンパイルする場合しか考慮していませんので,それ以外では修正が必要だと思います。Debianなら binutils-h8300-hms と gcc-h8300-hms と,関連パッケージをインストールし,/usr/h8300-hitachi-hms/binにPATHを通しておけばコンパイルできると思います。
初めて使うと,猛烈な違和感を感じると思いますが,1〜2時間も使っているうちに,これ無くては生きていけない体質になってしまいます。とても中毒性が高いので,自宅用と会社用の2台を作らざるを得なくなります。それが嫌ならこんなものはに手を出すべきではありません。(笑)
とりあえず現バージョンのファームウェアでは,ディレイ200msレート77cps固定になっています。ファームウェアを再コンパイルして書き込まない限り,リピート速度を変更することはできません。コントロールパネル等で設定した値を(例えば)3倍するなどして,ホストPCから24cpsにするという要求を受け取ったとき72cpsで処理するといった方法も考えましたが,しばらく使ってみた結果,速度を可変にする必要を感じないという結論に達しました。
活線挿抜も何とか動いているようですが,たまに動かなくなることもあります。こればかりは本物のキーボードでも時々動かなくなることがあるので,仕方ないのかもしれません。
それにしてもPS/2インターフェース。どんな歴史的事情があったのか知りませんが,過剰にインテリジェント化されていて面倒臭すぎます。可変長スキャンコードのデコードやエンコード,制御コマンドのハンドリングなど。まぁ,適当に手を抜く実装はできるんですが,少しでも本物のキーボードの動きに近づけたいと思ったので,プログラムやテーブルが長めになってしまいました。クロック線とデータ線で半二重通信する方式も,賢いと言えば賢いのかもしれないけど,PC-9800やSunのように調歩同期式シリアル通信のほうが制御は簡単です。これではマザーボードやBIOSやキーボードの相性問題が発生しそうな予感がします。実際にキーボードやマウスの切り替え機で問題を抱えたものが結構あるようで,開発者の皆さん苦労しているのかもしれません。過去の遺物との互換性を保つのも大変です。
|
|