FM TOWNS に Bluetooth 入力を追加する-プロトコル調査と試作

再び入手したFM TOWNS

なんとなくFM TOWNS再び入手しました。当時プログラムを組んであそんでいたことを思い出します。
これを最低限使える状態にしたいのですが

  • キーボードは持っていないし、持っているMSXマウスはボタンの効きがわるい
  • キーボードやマウスを入手するには費用がかかるし、置き場所もとってしまう

ということで、現在使用しているBTキーボード(トラックボール付き)とXBOXコントローラを使えるように、Bluetooth 入力を追加するためのアダプタを作ることにしました。

キーボードプロトコルの調査

FM TOWNSテクニカルデータブックには以下の記載がありました。
スキャンコードも記載ありました。

項目内容
インタフェースシリアル
 調歩
 9600bps
 8ビット+偶数パリティ+1ストップビット
 キーボードから本体への一方向転送
コントローラ8042
キースキャナキーボード側に搭載
使用プロセッサ:8049

しかし、これでは実際にどういうやりとりをしているのかがわかりません。
以下の参考サイトからメイク、ブレークコードを合わせてスキャンコードを送信するということがわかってきました。

マウスプロトコルの調査

マウスはMSXと同じなので、Web上にも多くの解説がありました。
TOWNS側によるCOM8の操作(STROBE)に合わせて4つのニブル=4ビットの塊を送信することは解説どおりでした。
タイミングについては以下あたりにも情報がありましたが、

FM TOWNSテクニカルデータブックにタイミングチャート詳細の記載があり、参考になりました。
しかし、TOWNSの2ポートに対して、マウスとして反応するべきなのかジョイパッドとして反応するべきなのか情報がなく、STROBEがどちらのポートに来るのか固定ではなかったので、今回作成するアダプタとしては両ポート監視して、STROBEを検知した方をマウス側とし、そうでない方をジョイパッド側としました。

ブレッドボードで試作

次の仕様で試作することにしました。

項目内容備考
マイコンAdafruit Feather nRF52840 Express使いやすいBluefruit52Libでうごかせる
(たまたま持っていたということもある)
接続するキーボード・マウストラックボール付きキーボード以前作成したキーボード
接続するゲームパッドXBOXコントローラ
電源基本的にTOWNSからの供給とする
デバッグ時はUSBから供給することもある

いくつかの課題に対する対応方針は以下としました

課題対応方針
TOWNS側は5VでAdafruit Featherは3.3Vなので、変換が必要レベルシフタで実現 → SN74AHCT125Nと分圧抵抗で実現
TOWNSからとUSBからの電源がぶつからないようにする必要がある理想ダイオードモジュールを使う

ブレッドボード試作の様子

  • 上部はキーボードとマウス・ジョイパッドからの入力です
  • 本体キーボードからアダプタへの入力や、マウスポートのSTROBE信号は左側の分圧抵抗を経由しています
  • アダプタから本体への出力はSN74AHCT125Nを経由しています
  • TOWNSからの電源とAdafruit Featherの電源は理想ダイオードモジュールで分離しています。

ブレッドボード試作向けに購入したもの

ブレッドボード一枚では足りず、連結しました。

品目購入元リンク
ブレッドボードamazon
ブレッドボード向けワイヤ秋月電子通商
以前はこちらも購入

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください