ラベル PS/2キーボード の投稿を表示しています。 すべての投稿を表示
ラベル PS/2キーボード の投稿を表示しています。 すべての投稿を表示

2026年2月1日日曜日

FM-11にPS/2キーボードを接続するための変換器の完成

 FM-11にPS/2キーボードを接続するための変換器が完成しました


【10月2日追加】
プログラムの不具合を修正した版をOneDrive(末尾にあります)に上げておきました。


先日報告しましたFM-11用PS/2キーボード変換器ですが、https://www.blogger.com/blog/post/edit/1662007451717538019/3111393154708868825

オートリピート機能も実現できたということでしばらく使用してみました。回路的には問題がなく、また、プログラムの方もGRAPHキーやカナキーなどの特殊キーの入力に純正のキーボードとの多少の違いがあったりしますが頻繁に使用するものでもなく、その他特に大きな不具合もないので、一応、これで完成ということにしようと思います。

純正キーボードとの機能の違いですが、PS/2キーボードにはINSモードを示すLEDがありませんので、当然、本体からのINSLEDON信号は無視されています。


変換器が完成


基板が届きましたので早速組み立ててみました。

基板と完成品

FM77AV用変換器と同様、タカチのケースSW-50にちょうど収まるサイズにしてありますが、試しに同一サイズの有り合わせのケースに収めてみたらFM-11側のケーブル用のコネクタがはみ出てしまいました。

ケースに収めてみた


8ピンのピンヘッダとコネクタを使わなければケースに収まるはずということで、直接ケーブルを基板にハンダ付けしたものも作ってみました。

ケーブルを直結


回路図です


FM77AV用PS/2キーボード変換器とほとんど同じですが、CLOCK信号を追加したのとKRESET信号をATtiny85のRESET端子に直結している点が異なります。本体へは8芯ケーブルで接続します。

回路図

基板を起こしましたが、手配線でも十分作成できるほどの簡単な回路です。


プログラムリストです


メインプログラムcnvps2fm.cを示します。

【2月12日修正】先頭のコメント中の一部を修正しました。
(PORTBのoutputにbit3を追加、special keys中のBREAKキーの機能の訂正)


この他にヘッダファイルcnvps2fm.hとスキャンコード変換テーブルscancodes_fm11.hがあればビルドできます。私は以前のFM77AV用変換器のコードを変更しながら作成しましたので、MPLAB X IDE (v6.25) 上の XC8 (v3.10) でビルドしました。


最後に


以上の3つのソースファイルとビルドで作成されたHEXファイルをOneDriveに上げておきますので、そんなことはないとは思いますが商用使用は禁止という条件を守っていただく限り自由に使用してくださって結構です。
HEXファイルをATtiny85に書き込んでFuse bitを正しく設定すれば動作します。ただし、所詮アマチュアの製作品ですので使用した結果、FM-11本体やキーボードに不具合が生じたとしても責任は負いませんのであらかじめご承知おきください。

【10月2日追加】
プログラムの不具合を修正しましたので、3つのソースファイルとビルドして作成したHEXファイルを再度OneDriveに上げておきます。


2026年1月22日木曜日

FM-11にPS/2キーボードを接続するための変換器の作成

 FM-11用のPS/2キーボード変換器を作成してみました

【1月23日訂正】末尾に訂正があります。

昨年、FM-11AD2(キーボード、ソフト、マニュアル付き)を入手しまして、拡張メモリ、FT-245高速通信カード、RTCカードなどを作成してきました。

その後、さらに実験用のつもりでFM-11AD2の本体のみを追加で入手しました。これは不動品でしたがMPU(68B09)を交換しただけで正常に動作するようになりました。

これは本体のみでキーボードがありませんので、PS/2キーボードを接続するための変換器の作成を始めました。
「FM-11本体インタフェース仕様」によりますと、キーボード用の入力端子はDin8ピンで、
1.CLOCK           (キーボード→本体)
2.DATA              (キーボード→本体)
3.KRESET        (本体→キーボード)
4.GND
5.VCC
6.INSLEDON    (本体→キーボード)
7.STOP              (キーボード→本体)
8.(NC)
とのことです。


純正キーボード


シリアルコードの確認

以前、FM77AV用のPS/2キーボード変換器を作成したことがあります。
「FM77AVにPS/2キーボードを接続する変換器の基板化(2019年7月31日)」
「FM77AV用PS/2キーボード変換器の不具合を修正(2020年1月21日)」

その際にはCLOCK出力やRESET入力というものはありませんでした。しかし、違いがあるにしても何とかなるだろうと甘く考えて始めました。
まず純正のキーボードと本体の間に挿入する画像のようなアダプタを作成し、オシロスコープとロジックアナライザでキーボードから本体に送られているCLOCKとDATA信号を観察しました。


測定用アダプタ



その結果、以下のようになっていることを確認しました。

[1]起動(リセット)時にまずキーボードが接続されていることを認識する。
起動(リセット)直後に本体からキーボードにリセット信号が送られ、その後の数msの間にキーボードから本体に’P’のブレークコードを送り、それが本体に受信されることでキーボードが正常に接続されていると認識する。
[2]キーボードから本体へクロックに同期してキーコードが9ビットのシリアルデータで送信される。
[3]シリアルデータはアスキーコード的な8ビットコードで、それを反転したものに第9ビットとして、通常キーでは0、特殊キーでは1を追加した形式。
[4]送信手順
(1)最初に20us幅のスタートビット(アクティブH、CLOCKとDATAも同様)
(2)その後26us間隔で14us幅のクロックが8個続き、それに同期してデータバイトのLSBからMSBの順に8ビットが送られる。
(3)最後に130us幅のクロックに同期して第9ビットが送られる。
(4)クロック終了後に約77usの間第9ビットが続き、その後0になって終了。
(以上のクロックやデータ幅はおよその値で結構変化します。)

プログラムの作成

これらの結果をもとにしてプログラムを作成しました。
回路は以前のFM77AV用の変換回路を流用し、CLOCKとSTOPの2ビットのみを追加した回路としましたので、PS/2キーボードからのキーコードの読み込みはFM77AV用のものをそのまま使うことができました。
しかし、使用したATtiny85ではピン数が足りず、リセット信号をどうするか悩みましたが、とりあえずtiny85のリセット端子に直結して本体と同時にリセットするようにしてみましたら、リセット後の数ms後に’P'のブレークコードを送ることでキーボードとして無事に認識されました。



試作変換回路


FM-11とFM77AVとの違い

プログラムの基本はFM77AV用と同様で、PS/2キーボードから入力されたコードでPS/2キーボードのスキャンコード表を検索して一致するコードの位置を見つけ、FM-11用のキーコード表の対応する位置のコードを取り出すというものです。
FM77AVでは40ビットのシリアルデータのうちの4バイトを表にしていましたが、FM-11ではアスキーコードが基本なので各コードそれぞれ1バイトの表を用意しました。
(ただし、STOPキーのみは扱いが別になっており、シリアルデータとして送信されるのではなく、Din8ピンの7番ピンを直接Lowに落とすことで本体に伝えています。)

これで、通常のキーやファンクションキーについては正常に入力ができるようになったのですが、シフトキーやコントロールキーについてはうまくいきません。
かなり悩みましたが、FM-11とFM77AVとではキーボードの役割が異なっていることにようやく気付きました。
FM77AVでのキーボードの役割は全てのキーの40ビットのシリアルデータを本体に送り込むだけで、シフトキーやコントロールキーの処理は本体側で行っているのに対して、FM-11ではキーボード内で必要な処理を行った結果のアスキー的なコードを本体に送っているのです。(アスキー的なコードをキーボードが送っていることからすぐに気付くべきでしたが、、、結構な時間を浪費することになってしまいました。)

ということで、シフトキーやコントロールキーが押された時の処理も必要になりましたのでNORMAL, SHIFT, CONTRLの3バイトの表に拡張することで、主なキーについては正常に入力することができました。

まだ対応できていないキーなど

ほとんどのキーについては正常に入力できるようになりましたが、現在のところきちんと対応できていないキーとしてカナキーとGRAPHキーの2つがあります。
これらのキーについては、自分的にはまず使用することがないので対応する必要性を感じないので、とりあえずこのままで良いかなとも思っています。。。

もう一つですが、現在のところオートリピートに対応できていません。
以前発表した、FM77AV用のUSBキーボード変換器でも同様なのですが、オートリピートに対応する手法を私が分かっていないためです。この機能は必要なので何とかしたいのですが、、、
【1月23日訂正】私の勘違いがありましたのでプログラムを修正しました。その結果、オートリピートが実現できました。

最後に

しばらく使用しながら不具合の有無を確認し、その間に回路のプリント基板を作成し、最終的に完成しましたら回路図とプログラムを公開する予定です。