再び入手した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の電源は理想ダイオードモジュールで分離しています。
ブレッドボード試作向けに購入したもの
ブレッドボード一枚では足りず、連結しました。






コメントを残す