2024年7月28日日曜日

88mk2/80SR用ゲームコントローラー

せっかくなので、ゲームコントローラーの対応も考えてみる。

PicoのUSB Hostサンプルを参考にしてBuffaloやElecomのUSB Joypadを試してみたが、パッドによってリターンデータの格納場所がバラバラで、汎用的なロジックが難しい。。

どれか1つだけ、と考えるとPicoのサンプルにあったDS4が良いのかな、と思う
こちらもPC-8001mk2SRに接続すると本体側のModifierキーが無効になるので、困った時に備えてL1(GRAPH)/L2(カナ)/R1(SHIFT)/R2(CTRL)にしておく。

USBハブでキーボードとDS4をつなげて動作確認。
同時接続しても、どちらからでも入力できることを確認。
ただ80SRの5V、電力的に大丈夫かは不明。
DUALSHOCK4は充電もするから、外部給電できるUSBハブとかの方が安全かも。

88mk2キーボードへのマッピングは以下の通り。
CAPSとカナキーは、SHIFTと同時押しでロックするようにした。
CAPSロック中はキーボード右上のCapsLock LEDが点灯、カナはScrollLock LEDが点灯。

88mk2実機が無かったので手間取ったが、なんとか動く(だろう)ものができたと思う。


余談。DS4の横にチラッと映っているやつのUSBキーボードアダプタも考えたことがあったが、キーボードから音が鳴るとか曲者なので見送っている...

2024年7月25日木曜日

PC-8801mk2用USBキーボードアダプタ

88mk2のUSBキーボードアダプタの問い合わせが来たので、少し調べてみた。

PC-8801mk2シリーズ(PC-8801mk2/SR/TR/FR/MR)のキーボードコネクタはDIN 13pinで、雄コネクタを覗き込んだ場合、左上が1pinで右下が12pin、真ん中下が13pinの並び。

13pinが5Vで外周がGND、88mk2本体から9~12pinでスキャンラインを指定し、押されたキーを1~8pinを読み取る様子。キーマトリックスは素直でシンプル。
88mk2シリーズの場合、スキャンラインは0~11まで。
キーが押されるとビットはLow(0)になり、何も押されていない場合は全ビットがHigh(1)になりFFhが返答される。

入力と出力のピンが独立してるので、余計な回路も必要なくPicoで行けそう。

ほぼDIN13コネクタとPicoを接続するのみだが、テスト基板を作成

うちには88mk2が無いので、PC-8001mk2SRで試してみる。
80SRの背面には汎用入力インターフェイスがあって、DIN 13pinのコネクタがある

基本動作はパソピア700用USBキーボードアダプタと同じ。8個のPIOで8個のリターンピンで独立して処理することで、PC本体の読み取りタイミングに間に合うように押されたキーを応答する。
少し違うのは、パソピア700はキーのスキャンタイミングがわかるピンがあるので、その1つのピンを監視していればよかったのだが、88の場合はタイミングの信号線がないので、9~12pinのどれかがLow(0)になるまでボーリングするようにした。
実際にUSBキーボードとシリアルを接続して動作確認。
結果は以下の波形。
下の4つが88mk2本体から送られてくるスキャンライン9~12pinだが、LowになってからHighになるまでの間隔が590nsくらい。
今回はポーリング処理が入っているためタイミングによるばらつきがあるが、それでもスキャン信号が届いてから200nsちょっとで返答できている。

USBキーボードでキーを押すと、ちゃんとキー入力されている。

1つ気になる点は、PC-8001mk2SR本体側のModifierキーが無効になる。
今回作成したアダプタを本体に接続すると、CTRL/SHIFT/GRAPH/カナキーがUSBキーボード側のみ有効になり、本体側のModifierキーが無効になってしまう。
仕様かもしれないが、本物の88キーボードを持っていないので確認できず。。

あと、今回88mk2版を試すにあたりPicoのUSBライブラリを最新にしたが、安定性がかなり上がった印象。USBキーボードの抜き差しをしてもハングしにくくなったし、今まで動かなかったHub付きキーボードも動くようになった。

88mk2シリーズでも動きそうだが、本体で検証できていないので...