中はこんな感じ。なんとなくマトリクスで配線されてるんですが、まったく異なる配列になっていました。しかも直接信号を読むわけじゃなく、右側の黒玉マイコンが処理してからゲームを動かしている左側の黒玉マイコンに渡しているようです。
ケーブルのところを見ると、一応信号名が振ってあり、順番に
- VDD
- OUT0
- OUT1
- OUT2
- GND
- P2D4
- P2D2
- P2D3
- P2D1
- SEL
結果、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 件のコメント:
コメントを投稿