「TV麻雀ゲーム」という、一般名詞ではなく商品がありまして。ビデオ入力でテレビに繋げて遊ぶ麻雀ゲームです。内容的には8-bit時代の代物なんですが、3000円以下で売っていて、コントローラとして流用するにはわりと良さげな感じがしまして、1つ確保してあったやつをこの週末にばらしてみました。アーケード基板と互換性があればラッキーとか思ってたんですが、まったくさっぱり。なんとなくマトリクスで配線されてるんですが、まったく異なる配列になっていました。信号を読むわけじゃなく、右側の黒玉マイコンが処理してからゲームを動かしている左側の黒玉マイコンに渡しているようです。ケーブルのところを見ると、一応信号名が振ってあり、順番にVDDOUT0OUT1OUT2GNDP2D4P2D2P2D3P2D1SELとなっているんですが、信号名の数は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になる。クロックのエッジからこれくらい経ったら読んでねってマーク(で半世紀前)ならまだわかるんだけど......コントローラ側は信号読まないので存在価値は謎。edge両方で信号送り出してて謎。END信号は最後のサイクルで終了マークとしてHIGHになります。あと、セレクトボタンがホスト側の基板に載ってる関係でホストから配線してあげてるみたいで、これがSEL信号の正体。この信号を立てると立てた間ずっとP2D1が立ち上がるという......。オリジナルのホストはタイミングを合わせて10サイクル目だけ信号を出して、P2D1から戻ってくる半サイクル信号を見て「うん、よしよし」ってなるらしい。読んだほうが早いのになぜ?!という事で、ツッコミどころ満載でしたが......まぁ、読めればいいので。ZeroにGPIOで繋いで、キーボードとして認識するようにしてみました。そのままビデオ入出力も奪って、現在はスーパーリアル麻雀専用機と成り果てております。ピンヘッダつけたら微妙にケース内に入らなくなってしまったので、あとで電池ケース部分を壊してそこにZeroを内蔵しようかと。あと、ホスト側の基板からボタンを取り外そうとしたら、ボタンが粉々に砕けてしまったため、代替になりそうなボタンを取寄中......。良い話でしたが、なんというかこのプロトコルの脱力感を誰かと分かち合いたくてorz他の基板持ってる子達のデータも詰め込んでみた。コンポジットビデオ出力なんだけどインタレースなので、2画面分出してもわりと綺麗に表示できたりはする。Piでキーボードとして見せるユーザーランドドライバのコードはこちら。これ、RP0で作るほうが正しいと思う。薄いから簡単に組み込めるだろうし。ビデオ出力で喜びたいって変わった人向け。