3MHz
3MHz
3MHz
MSX BASIC version 4.0
Copyright 1990 by Microsoft
25277 Bytes free
Disk BASIC version 2.01
主にMSX関係のコンテンツが置いてあります。

A1FにPS/2キーボードを接続(1)

A1Fのキーボードは薄い鉄板にフィルムを敷いて、その上にスポンジを乗せていて、鉄板のたわみやスポンジの劣化でフィルムを押せなくなって、キーを押したのに反応しない状態になりやすい構造です。

所有しているA1Fも御多分に漏れず、かなり昔にその症状が出ていました。

修復を試みても良かったのですが元々キータッチに不満もあったため、 NEC製のメカニカルキーボードをジャンクで購入し(当時は1枚300円くらいで大量にあったのを記憶しています)、A1Fのコネクタからすだれケーブルで引き出して無理やり配線して使っていました。

前回のA1Fのメンテナンスでそのキーボードの配線も所々切れているのを発見し、それを修復するのもテンションが上がらなかったため、今度はPS/2キーボードを接続することに挑戦してみました。

キー入力の仕組み

まずプログラム側から見てみます。

I/Oアドレス0aahの下位4bitにキースキャン信号を出力し(上位4bitはLEDや1bitサウンド等があるので変更せずに)、キースキャン信号を出力後I/Oアドレスの0a9hを読み込むとキースキャン信号に応じたデータが返ります。

キースキャン信号はキーマトリクスの行のことで(参考ページ)、例えば行0は、0,1,2,3,4,5,6,7のキーの押下状態を返します。

ハードウェア的には、0aahに書かれたキースキャン信号はS1985の81ピンから84ピンに出力されます。

そのキースキャン信号を元に対応するGNDが有効になり、そこに8個のキースイッチが繋がります。

キーが押されると該当ビットが0になるので、4キーが押されていれば11101111b = 0efhが取得できる仕組みです。

A1FではこのS1985の4ピンは使用せず、uPD65013GF375によって11本のピンにデコードされて出力されているようです。

行0を指定した場合S1985からは0000bが出力され、uPD65013GF375からは行0に対応するピンのみがL出力されるという具合です。

対応していないピンはHが出力されると思い込んでいたのですが、よく調べるとHi-Zのようでした。

基本的な考え方

PS/2キーボードを繋げることを考えると、AVRでキーボードの押下状態はMSXと関係なく調べておき、MSXから行が指定されたとき、素早くその行に対応するキーの押下状態をS1985に入力してやれば上手く行きそうです。

回路図

このような感じで、部品は秋月電子通商で揃えました。

カッコ内ははんだ付けのポイントです。

GNDの取り出しポイントは図に書いていませんが、適当なところからGNDを取ります。

今回はジョイスティックポート付近の箇所から取り出しました。

3つのLED状態は抵抗の足から取り出し、

はんだ付けが大変なので別の箇所から取りたかったのですが良い場所が無いみたいなので、スキャン信号はS1985の足から直接、RESET信号は少し離れた箇所から取り出しています。

信号の配線は0.2mmのUEWで引き回しました。MSXとAVR側の接続は良いコネクタを思いつかなかったため、細ピンヘッダと丸ピンICソケットで接続しています。赤い基板はパワーグリッド・ユニバーサル基板Cタイプです。

スペースが空いているのは、uPD65013GF375の11本のピンをロジックICで4bitにしてからAVRに入力するようにしてみたり、トランジスタを使ってみたりと色々試行錯誤した跡地で、上の回路図だともう少し小さくできるとは思います。

保護回路について

PS/2インターフェースはホットプラグに対応していないので通電中に抜き差しすると壊れる可能性があるらしいですが、その辺の保護回路については知識不足の為自信がありません。

とりあえずPS/2コネクタの5Vラインにポリスイッチと信号ラインにダイオードを入れました。

PS/2インターフェースの最大供給電流が275mAとのことなので250mAのポリスイッチにしてみましたが、その倍の500mAで遮断ということらしいので、それを見越して半分の電流値のものを使うべきなのかよく分かりません。

実験では50mA(100mAで遮断)のポリスイッチでも切れることなく動作していたので、低めのほうが良いのかもなんて気がしますが…。

というのも、ブレッドボード上でPS/2のアクセスを試していたとき(MSXには未接続)、急にAVRに書き込めなくなり確認したところAVRは壊れていて、おまけに繋いでいたキーボードまで駄目になったという事があったので…(この時はまだ保護回路は何も付けていません)。

原因は分からずじまいで、遊んでいた+12Vに触れてしまった可能性もありましたが、ブレッドボードに挿していたPS/2のコネクタが取り回すうちに抜けてしまっていたのも確かです(それ以降のテストはすべてはんだ付けに変更しました)。

そんなわけでちょっと心配な部分でもあります。

ソフトウェアについて

ソフトウェアについては後半に続きます。