2018年11月27日火曜日

「TV麻雀ゲーム」をコントローラだけ拝借

「TV麻雀ゲーム」という、一般名詞ではなく商品がありまして。ビデオ入力でテレビに繋げて遊ぶ麻雀ゲームです。内容的には8-bit時代の代物なんですが、3000円以下で売っていて、コントローラとして流用するにはわりと良さげな感じがしまして、1つ確保してあったやつをこの週末にばらしてみました。アーケード基板と互換性があればラッキーとか思ってたんですが、まったくさっぱり。


中はこんな感じ。なんとなくマトリクスで配線されてるんですが、まったく異なる配列になっていました。しかも直接信号を読むわけじゃなく、右側の黒玉マイコンが処理してからゲームを動かしている左側の黒玉マイコンに渡しているようです。

ケーブルのところを見ると、一応信号名が振ってあり、順番に

  • VDD
  • OUT0
  • OUT1
  • OUT2
  • GND
  • P2D4
  • P2D2
  • P2D3
  • P2D1
  • SEL
となっているんですが、信号名の数は10個、実際の線の数は11本。あれれ……という事で、あんまりあてになりませんでした。それでも信号名からなんとなくマトリクスで読み出してるんじゃないかって期待があったので、ホスト側のマイコン、コントローラ側のマイコン、それぞれに電源入れて、出力がどうなるか調べてみました。どうなるか、というのは信号がHIGHになるかLOWになるか、また軽くpull-up/downした時に信号を動かせるかどうかで出力なのか入力pull-up/downなのかを判断します。

結果、OUT0/1/2がホスト側出力と判明。負論理でone-hotを出しているように見えたのでやっぱり普通にマトリクスかなーって思えたんですが……Arduinoからマトリクス想定で信号を入れても、反応するボタンは数個しかありませんでした。

仕方ないので再びホストとコントローラを繋げて、間の通信をロジアナで観測。結果、無駄に3出力4入力も使うシリアル通信だと判明。中身すっかすか。

足りなかった信号名はP2D1とSELの間の信号で、仮にENDとしました。ホストからの出力はOUT2はENABLEだと思えば良い感じ。OUT0は通信開始時に半クロックだけHIGHになる。まぁ、クロックのエッジからこれくらい経ったら読んでねってマーク(で半世紀前)
ならまだわかるんだけど……コントローラ側は信号読まないので存在価値は謎。シフトレジスタのリセット信号わざわざ送ってるのかな?データについてもスカスカなのにわざわざneg edge/pos edge両方で信号送り出してて謎。そしてEND信号は最後のサイクルで終了マークとしてHIGHになります。

あと、セレクトボタンがホスト側の基板に載ってる関係でホストから配線してあげてるみたいで、これがSEL信号の正体。ただ、この信号を立てると立てた間ずっとP2D1が立ち上がるという……。オリジナルのホストはタイミングを合わせて10サイクル目だけ信号を出して、P2D1から戻ってくる半サイクル信号を見て「うん、よしよし」ってなるらしい。直接読んだほうが早いのになぜ?!

という事で、ツッコミどころ満載でしたが……まぁ、読めればいいので。例によってOrange Pi ZeroにGPIOで繋いで、キーボードとして認識するようにしてみました。そのままビデオ入出力も奪って、現在はスーパーリアル麻雀専用機と成り果てております。ピンヘッダつけたら微妙にケース内に入らなくなってしまったので、あとで電池ケース部分を壊してそこにZeroを内蔵しようかと。



あと、ホスト側の基板からボタンを取り外そうとしたら、ボタンが粉々に砕けてしまったため、代替になりそうなボタンを取寄中……。

わりとどうでも良い話でしたが、なんというかこのプロトコルの脱力感を誰かと分かち合いたくてorz


他の基板持ってる子達のデータも詰め込んでみた。コンポジットビデオ出力なんだけどインタレースなので、2画面分出してもわりと綺麗に表示できたりはする。

今回作った「TV麻雀ゲーム」をOrange Piでキーボードとして見せるユーザーランドドライバのコードはこちら。たぶんこれ、RP0で作るほうが正しいと思う。薄いから簡単に組み込めるだろうし。わざわざビデオ出力で喜びたいって変わった人向け。

0 件のコメント: