Home MindStorms Software Hardware Forum  

新館工事中です。

 
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キット 基板全貌 配線
H8/3664キット
基板全貌
配線

ケースは前回の作品で使ってみて大変気に入った,タカチ電気工業製のSS-N90を今回も採用します。加工も前回とほとんど同じです。

ケーブルの基板用コネクタはシングルラインICソケットにハンダを流し込んで作った,お手軽コネクタです。

ケースの板厚が3mmもあるので,これにぴったり合うゴムブッシュが入手困難で,手持ちが1個しかなかったため,悩んだ末,2台目は自己融着テープを太巻きにしてゴムブッシュ代わりにしました。

ケースの加工 ケーブルの末端処理 ケーブルの結線 ケーブルの引き出し
ケースの加工
ケーブルの末端処理
ケーブルの結線
ケーブルの引き出し

ファームウェア

開発環境はLinuxを使用します。コンパイルと書き込みに使う開発用PCのほかに,書き込み中に電源を供給するため,PS/2コネクタを有したPCが必要です。1台しか無い場合は別途電源を用意する必要があります。

参考:LinuxでH8開発に関する情報

quckey.tar.gz (2003-02-13)
  • IBM 5576-002キーボードを接続したとき,普通の106キーボードとしてエミュレーションするようにしました。(解説はこちら
旧バージョン

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やキーボードの相性問題が発生しそうな予感がします。実際にキーボードやマウスの切り替え機で問題を抱えたものが結構あるようで,開発者の皆さん苦労しているのかもしれません。過去の遺物との互換性を保つのも大変です。

Copyright (C) 1999-2003 S.Fuchita. All rights reserved.