2018年2月23日金曜日

俺のIOボードでスーチーパイが動かないわけがない。

しばらく前に作ったJVS IOボードの実験も兼ねてスーチーパイIIIを入手してみた。JVS 3版に麻雀基板向けの入力の扱いが定義されてたんで、それをサポートするだけで良いのかと思ってたんだけど、予想に反して独自プロトコルだったので少し調べて対応してみた。

ちなみにNAOMIはJVS最初期のボードなので麻雀まわりが決まる前だったんでしょうね。独自プロトコルをとっている以上、I/Oボードは選ばざるを得ないという……。

ちなみに対応してないIOボードの時はこんなメッセージが出てゲームは起動しません。


まぁ、自作なんで最悪どうにでもなるかな、と。まずは情報収集。

BONZE ADVENTUREさんによると「NAOMIの麻雀はカプコンコンバータでは動かずセガコンバータなら動く」と。セガコンバータのEXT I/Oの結線方法なんかも書いてあり、中で何をやってるのか朧気ながら想像つきます。出力ドライバと組合させてJAMMAに似たスキャンを使った入力の多重化をやってるんですね。

さらにGAME屋萬年堂さんが動作するIOボードのJVS TESTのスクリーンショットを公開してくれていました。これを元に同じcapabilityを持つボードをエミュレートすれば最低限動作するだろう、と。

で、無事に動作して、少しずつ情報を落として動作するだけの最低要件をまとめたら、必要なのは二点でした。JVS的に必須項目になってる機能は条件から落としてます。


  • I/O IDで返す名前は「SEGA ENTERPRISES,LTD.」から開始していなければならない(User-Agent問題……)
  • 汎用ドライバ出力を8スロット備えている
前者はセガを名乗るのか……と気がひけますが、後ろに「compat」とか付ければ嘘じゃないのでいいでしょう(User-Agent問題……)。出力ドライバも実際に出力できる事は要求されてないので大丈夫。スキャンラインの切り替えに使ってるだけなので「持ってるよ」と機能チェックで返してあげればOK。


JVS TESTで見える情報はこんな感じですね。DIPスイッチで切り替えた時のみ、このモードに切り替わるようにしました。幸いJVSは3版を名乗っても大丈夫そう。


スーチーパイさんも怒りません。


無事に起動しました、よしよし。

実際のプロトコルについてはゲーム側のテストモード使って入力に探りを入れて解決。ざっくり以下のようなプロトコルでした。
  • 8-bitsの出力ドライバに対し、bit 4からbit 7に対してone-hotを出力
  • その時に出力されているbitに応じて、SW入力のうち各プレイヤー向けの情報の第1バイト(元々START/SERVICE/UP/DOWN/LEFT/RIGHT/B1/B2がアサインされてたバイト)の意味が変わる
スキャンは負論理じゃなくて正論理なんですね。もしかしたらセガコンバータはJAMMA側のスイッチがpull-upじゃなくてpull-downになってるのかも。でなければドライバの出力をどっかで反転させないとだし。JVS側が正論理だからこの作りもわからないこともないけど、そっちはパケットだし、回路側は負論理のままの方がすっきりするんだけど……。

で、その後テストモードで調べた入力マトリクスは以下の通り。

|OUT\Bit||  B7 |  B6 |  B5 |  B4 |  B3 |  B2 |  B1 |  B0 |
+-------++-----+-----+-----+-----+-----+-----+-----+-----+
|  0x40 ||  A  |  -  |  E  |  I  |  M  | KAN |START|  -  |
|  0x20 ||  B  |  -  |  F  |  J  |  N  |REACH|  -  |  -  |
|  0x10 ||  C  |  -  |  G  |  K  | CHI | RON |  -  |  -  |
|  0x80 ||  D  |  -  |  H  |  L  | PON |  -  |  -  |  -  |

伝統的な麻雀コンパネと同じ組み合わせになってますね。まぁ、無理して変える必要もなかったんでしょう。ひとまず十字とボタンの組み合わせで入力とるようにしたバージョンをコミット。そのうち麻雀エッジに直接対応させようかと。

はて、通常のJVSの麻雀配列は何でテストしたら良いのやら……。

1 件のコメント:

とよしま さんのコメント...

兎の場合は0x80のラインが0x08になってた。