PCエンジンマウス互換品を自作する

www.youtube.com

PCエンジンマウス」の互換品を作ってみました

Multiway pad converterのモードの一つなので、正確にはパッド変換器です。以下のページにソースを公開しています。

GitHub - nicotakuya/multiway-pad-converter

 

PCエンジンマウス」とはPCエンジン専用のマウスです。かなりマイナーな周辺機器だと思います。ベーマガのバックナンバーを確認したら、どこにも写真がありません。1992年9月号で、'92東京おもちゃショーNECが専用マウスを発表したという一文があるだけでした。マウスを「マリオペイント」とセット売りした任天堂は商売上手だなと思います。

PCエンジンマウスの対応ソフトが手元にありません。対応ソフトがどれなのか不明。

動作チェックするには、ソフトは必須。そして、ソフトの動作チェックにマウスが必要になります。堂々巡りです。

しかたないので、中古のPCエンジンマウスを買いました。買ったら、もう自作する意味ないんですが。

駿河屋で3010円。高い、、、高すぎる、、、。このお金で中古のデュアルショック2が6個買えます。

 

マウスのテストプログラムを作ってみました。

HuCにはマウス用の関数が用意されているので、それを呼べばいいだけです。マウスの認識は自動的に行われます。

以下のページでソースコードを公開してます。

github.com

 

PCエンジンマウスの通信仕様は、どこにも資料が存在しないので、HuCのソースファイルを解読しました。"include/pce/mouse.asm"がマウスのドライバです。

CLR端子でPCエンジンから同期信号を送って、移動量/ボタン情報を読み取ります。

・SEL端子=Hに切り替え、CLR端子をL→H→Lに切り替え、K0~3から移動量読み込み。

・SEL端子=Lに切り替え、ボタン情報読み込み。

これを4回繰り返します。CLRのパルスは1→2回目だけ時間が空いていて、それで、1回目だと認識していると思います。

移動量の内容は読み込み回数によって、次のように変化します。止まった状態だと0です。

・X移動量 上位4ビット

・X移動量 下位4ビット

・Y移動量 上位4ビット

・Y移動量 下位4ビット

ボタン情報は4回読んでも同じ内容です。RUN/SELECT/ボタンII(左クリック)/ボタンI(右クリック)に割り振ってあります。

 

ここで問題が発生。

マウスが認識されません。「EXIST」が0のままです。

Arduinoの起動に時間がかかりすぎて、マウスを認識している処理に間に合わないためです。マウスの認識は最初だけで、失敗すると以後は認識してくれません。

 

苦肉の策ですが、PCエンジンにリセットボタンを追加しました(ソフト側からリセットする方法が不明だったので)。
  

リセットした結果、うまくマウスとして認識されました。アナログスティックを動かすと、カーソルが動きます。

回路に問題があって、SELECTとRUNボタンは外付けになっていて、パッドのボタンを割り当てることができません。XHE-3をそのままマネしたので、こういう仕様になってしまいました。
マウスの認識はHuCで独自に採用しているものです。ソースを見た感じでは、ポートの状態が一定回数連続で「0」ならマウスと認識しているだけで、かなり判断が甘いです。他のソフトで正しく動くのか、まだ確認していません。

 

(追記2022/7/11)

うっかり「世界初」と書いてしまったのですが、もっと先に作っている方が居ました。ご参考までに。

https://github.com/dshadoff/PC_Engine_RP2040_Projects

 

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com