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

1.3インチ カラー液晶AE-ATM0130B3

www.youtube.com

 

秋月で「AE-ATM0130B3」というカラー液晶を買ったので、テストプログラムを作ってみました。もう、わざわざ「カラー」って言う時代じゃないかもしれませんが。 

ソースと回路図はこちらで公開中です。

github.com

「AE-ATM0177B3A」と違って、今回は秋月のサンプルがしっかりあるので、すんなり出来ました。秋月のサンプルはArduino Uno用ですが、自分はArduino Pro Mini互換を使ってみました。

秋月のサンプルはRAMを割り当てない方式で表示しています。

 

ここからが問題。

液晶は240 x 240ピクセル、16ビットカラー(65536色)です。そのままマイコンのRAMを割り当てようとすると、240 x 240ピクセル x 16ビット = 115200バイト必要です。ATmega328PのRAM容量は2048バイトなので、どこをどうやっても無理(この56倍は必要)。

どうにかして、ATmega328PでRAMを確保できないか、考えてみたのですが、性能を落としまくることで対処してみました。

・解像度を1/4に(画素数 1/16)。

・1ピクセルあたり4色に(色数 1/16384)。

これなら、60 x 60ピクセル x (2÷8ビット) = 900バイト。許容範囲内です。

RAMの消費を1/128に抑えることができました。

 

このようにドットを4倍に拡大して表示します。カラーパレットをこまめに変更して4色しかないことを誤魔化しています。

表示の更新が遅いです。

SPIクロック8MHzで通信しているはずなのに、それでも遅い、、、これはもうマイコンの限界だと思います。描画エリアを削ったり、さらに工夫する必要があります。

高性能なマイコンで表示したら一気に解決ですが、それは当たり前なので、電子工作としては面白くない。

 

あと、この液晶は3V相当の電源が必要です。

自分の場合、最初はダイオード3個で2.7Vを作って入力してましたが、その後、電子工作警察に怒られそうだと思い、真面目に3.3Vの三端子レギュレータで入力しました。

 

ベーマガ1999年11月号が290円

ファミ通の「メガドライブミニ2」の生放送(録画)を観たのですが、その中で、サイバースティックの端子を「15ピン」と言う場面があり、そこは間違えたらダメだろ!、と妙に腹が立った。

こういうのはよくあります。オタクの逆鱗というのか。

当然、相手には悪意はありません。

 

話は飛びますが、三才の「ゲーム雑誌ガイドブック」というKindle本。

https://www.amazon.co.jp/dp/B07YZCZPRK/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

ここで試し読みとして、ベーマガの紹介ページが無料で読めるのですが、本文の、、、

「1999年4月号でベーマガはリニューアルを図り

(中略)

ゲーム雑誌としてのベーマガは役割を終えたのでした。」

って、なんだこりゃ。

ゲーム雑誌として終わったのは、2001年3月号では?

認識が2年近くもズレてるのは、どういうことだろう。書いてる人には悪意はないと思いますが、200号記念のキャプションでの「ゲーム雑誌としてのベーマガが完全に終わった瞬間だった。」とか、いちいちカンに触る。これも逆鱗。

 

↑ 参考までに、2001年3月号のゲーム関連の目次がこちら。

次号(2001年4月号)からゲーム関連記事が一切無くなります。

 

ここからが本題なのですが、

先ほど駿河屋のページを見たら、ベーマガ1999年11月号の中古が290円で売ってました。

いくらなんでも安すぎる。。

(右側にあるスーパーソフトマガジンも相場の半分以下では? 理由はわかりませんが、凄まじい価格破壊。)

 

ベーマガ1999年11月号といえば、水樹奈々さん特集が載ってる号。

モノクロ2ページのために、わざわざ水樹奈々さんが電波新聞社まで来たってのが、ありえなさすぎる。超貴重記事。

あと、1999年11月号といえば、ゲームイベント「ECTS」の特集記事が必見です。ECTS特集は、次号の1999年12月号にも載ってますが、あとがきによると、取材に投じたお金は22万円とのこと。これぞまさにベーマガ・イズム。

これだけでも1000円くらいの価値はあるんじゃないかと思います。

というわけで、「ゲーム雑誌として完全に終わった」とか言われてる1999年4月号以降のベーマガでも見どころはありますので、読んでみてはいかがでしょうか。

 

CYBERSTICKをメガドライブに接続する

www.youtube.com

CYBERSTICKをメガドライブに接続する変換器です。

CYBERSTICKの工作ネタは長年封印していたのですが、今やらずにいつやるのか?!ということで、大急ぎで作ってみました。

謎の義務感です。

 

いつものように「アフターバーナーII」で動作確認しました。

 

「Multiway pad converter」はメガドラのアナログパッドに対応済みです(XE-1APのMDモード互換)。この技術を応用します。

 

追加用の回路。

以下の点を変更するだけです。

・CYBERSTICK用のボタン入力処理を実装。ベーマガ1990年10月号が参考になります。

・CYBERSTICK用にDsub9pinオスのコネクタを追加。ACKだけで同期を取って、LHを省略しました。

メガドラへの送信データ(11ニブル)の順番を入れ替える。

↑CYBERSTICKとXE-1APでは順番が違うので、こんな感じに入れ替える。

GitHub - nicotakuya/multiway-pad-converter

こちらでソースを公開しているので、詳しくは「cyber_to_megadrive」関数を読んでください。

*言い忘れましたが、メガドラを起動したら一旦リセットしてください。それでアナログパッドの検出をやり直します。

 

なお、ベーマガの1989年12月号には、開発中の「アフターバーナーII」と、XE-1AJを接続した状態のメガドライブが掲載されています(戦略方針発表会のレポート記事より)。CYBERSTICKはシャープの商品なのに対して、XE-1AJはマイコンソフトの商品です。

最終的にメガドラ仕様のXE-1AJは発売されず、パッド型のXE-1APが発売されました。

XE-1APはPCモードとMDモードの2つを搭載しています。一方、CYBERSTICKはPCモードだけです(パソコンの周辺機器なので当然ですが)。

 

nicotakuya.hatenablog.com

アルカノイドIIのVSモード対応コントローラの自作

www.youtube.com

 

ファミコン版「アルカノイドII」のVSモード対応のパドル・コントローラを自作してみました。Multiway pad converterにオマケ的に機能を追加しました。2人同時プレイ用コントローラですが、1人プレイ時でも問題なく使うことができます。

VSモードというのは対戦モードのことです。PONGそっくり。

 

もう少し説明します。

ファミコン版の「アルカノイド」シリーズには回転するツマミが付いた特殊なコントローラが付属しています。これをパドル・コントローラと呼ぶことにします。

 

アルカノイド「初代」と「II」とでは、パドル・コントローラの仕様がちょっとだけ違います。「II」に付属するパドルには、拡張端子が付いていて、パドルを増設することができます。右の方法だと、無限に接続ができてしまいますが、ファミコンは2台までしかパドルを認識できません。

 

仕組みは単純で、「アルカノイドII」では拡張端子のピンの割り当てを2本増やしてるだけです。

4番ピンがプレイヤー2用のパドルの位置データ、5番ピンがプレイヤー2用のボタンの状態です。

クロックやラッチの信号線はプレイヤー1と2で共通です。

アルカノイド用のパドルコントローラは、過去に作ったことがあるので、それにプレイヤー2用の処理を付け足すだけで作ることができました。

 

VSモードですが、クセのある仕様です。

メニューから「VS」→「FRIEND」を選ぶ時、ここでSTARTボタンを押してしまうと、以後は備え付けのコントローラだけの操作になります。パドルに触れても無反応です。なので、パドル側にあるボタンでスタートしないといけません。

 

VSモードは戦略性がなかったり、冗長だったり、ゲームとして、面白味に欠けます。

PONGの現代版を作ったら面白くなるのでは?!

と、大いに期待したら、思い切り肩透かしを食らわされました。パドルが2人同時プレイに対応しているのは、このVSモードだけです。

実にもったいない出来。

 

あと、DualShock2のアナログスティックでも遊べるように対応しました。

バウスを少しだけ動かすというのが、やりにくい。一気にズドンと動いてしまいます。

しかし、アナログの感度を落とすと、デジタルのコントローラと同じになってしまいます。やはり、ツマミで動かしたいところです。

 

nicotakuya.hatenablog.com