2010年9月6日作成 2011年7月15日更新
ずいぶん前に作ったアダプタが、最近のマザーボードや USB PS/2 コンバータで使えないので、プログラムを書き直しました。
Microchip 社の無料で使える開発環境の MPLAB で C言語が使えるようになったので、C言語で書きました。アセンブラで書いた物より、いくらか読みやすくなったと思いますので、勝手に改良して使ってください。
C言語で書きました。(HI-TECH C / PICC)
2011年7月15日:ソースリストを見た方に指摘して頂いたのですが、現在 [F7] キーが利きません。convprocess.c
を修正すると治ります。ごめんなさい。
キーコード変換結果の最上位ビットで拡張キーかどうかを判断しているのですが、拡張キーではない [F7] のキーコードが0x83
と最上位ビットが1
になっているために、拡張キーとして処理されてしまうのが原因です。キーコードの変換結果が0x83
の時は拡張キーではなく、通常のキーとして扱うようにすると治ります。
[F7] を押す予定がないので修正しないかも…
ASUS のマザーボード MA2-VM と SANWA SUPPLY の USB-PS2 CONVERTER USB-CVPS2 で、調子良く動くことを確認。旧COMPAC PROLIANT ML350(PCサーバー)では BIOS でキーボードエラーが出て立ち上がらないけど直すつもりは無い。
メモリ使用量はこんな感じ。PIC16C84 でも PIC16F84 でもどちらでも使用可能。
持っていないので試していないけど PIC16F88 でもハードウェアの設定を少し書き直せば使えると思う。PIC16F88 のほうが、安くてメモリも多いのでこれから買うなら、PIC16F84 よりも PIC16F88 のほうがよいでしょう。一個 200円くらいです。
前にアセンブラで書いたときには、ホストコマンドの F4:ReadID を処理していなかったので、PC起動時のテストでキーボードエラーとなっていたようです。通信タイミングもおかしかったかも?
PS/2の通信中に割り込みが掛かると、PS/2の通信タイミングがおかしくなるので、X68000キーボードとの歩調同期通信は割り込みを使わないで処理をした。この副作用で、プログラムサイズも縮んだ。
また、F3:Set Typematic Rate/Delay コマンドも無視していたので、キーのリピート間隔が X68000 キーボードの初期値から変えられなくて、リピートが遅かったんだけど、これをちゃんと処理するようにしたら、かなり軽快に入力できるようになった。
今回、全面的にC言語で書き直したんだけど、なかなか BIOS のテストを通過するところまで行かなかった。どうしても動かないので、マイコンで簡易ロジアナのようなものを作って、市販のキーボードが PC とどんなやり取りをしているのかを調べて、やっと動くようになった。波形を目で見られると、とてもわかりやすい。もう少しちゃんと動くロジアナを作りたくなった。
2001年の物と同じです。
('A`)