2018年9月9日日曜日

NAOMIとセガサターンのコントローラを繋げる

今までNAOMI使う時は自作のJVS-JAMMA変換器を使ってたんですが、バーチャロンの入力に興味を持ったことがきっかけでサターンのコントローラを繋げる変換器を作る事に。

バーチャロンのツインスティックについては、とある魔術の〜でタニタさんのプロジェクトが話題でしたが、やはり目標が難しかった。残念……って事で実際にツインスティックの入力がどうなっていたのか調べ始めたのが発端。アナログかと思ってたけど実はデジタル入力だったんですね。そんなわけで、実際には(方向+2ボタン)×2で合計12ボタンってだけの簡単な装置でした。サターン用のツインスティックならヤフオクで1,000円前後で手に入りますので、今押さえておくのが吉かと判断しまして。サターンのコントローラは2bitの選択信号と4bitのデータ入力で4×4の16ボタンの入力が取れるようになっていて扱うのはかなり簡単な類いなんですね。

通常のサターンパッドだと入力の組み合わせはこんな感じ。データ側の信号はactive lowで、入力側でpull-upが必要です。sel[1:0] = b11の時にdata[2:0]が0b100の固定値を返すので、これでコントローラが刺さっているかどうか判断できます。

sel[1]sel[0]data[3]data[2]data[1]data[0]
00RXYZ
01StartACB
10
11L100

これがツインスティックだとこんな感じになる。わりとサターンパッドの物理的な配置が考慮されてて、ツインスティック向けの操作をパッドで遊んでもある程度なんとかなるようになっています。左スティックがそのまま方向ボタン、トリガーとボタンがL/Rに対応して、右スティックはサターンのXYZ/ABCボタン中央付近が上下左右に対応し、両端でトリガー、ボタンに対応しています。

sel[1]sel[0]data[3]data[2]data[1]data[0]
00L ButtonR →R ↑R →
01StartR TriggerR buttonR ↓
10L →L ←L ↓L ↑
11L Trigger100

あと、確認していて気づいたんですが、サターンのコントローラはGNDさえ通していれば動作しちゃうみたいです。あれ?って事は中でもpull-upされてて、pull-up経由で電源漏れてきてるのかな?ちょっと未確認です。まぁ、ロジックIC数個とスイッチだけで作れそうな構成ですしね。同時押しすると流石に黙るとは思いますが。

いずれにせよ、信号線が6本しかないのでJAMMAに変換するより配線が楽で助かります。今まで通りArduino Nanoベースで作るなら、今回はやらなかったけど、2P分のコネクタまで用意する事も可能ですね。

一方で、これをNAOMIに繋げようと思った場合、JVSの入力信号にどう対応させるか。JVSは入力信号の標準配置があって、2P対応してると基本こんな配置になります。

b7b6b5b4b3b2b1b0
B1TestTilt 1Tilt 2Tilt 3----
B21P Start1P Service1P ↑1P ↓1P ←1P →1P B11P B2
B31P B31P B41P B51P B61P B71P B8--
B42P Start2P Service2P ↑2P ↓2P ←2P →2P B12P B2
B52P B32P B42P B52P B62P B72P B8--

で、これがバーチャロンの場合には以下のような感じになっていて、1P/2Pそれぞれの方向+2ボタンが左スティック、右スティックそれぞれに対応しているようです。

b7b6b5b4b3b2b1b0
B1TestTilt 1Tilt 2Tilt 3----
B2StartServiceL ↑L ↓L ←L →L TriggerL Button
B3QM-------
B4--R ↑R ↓R ←R →R TriggerR Button
B3--------

ここまで分かればあとはちょろっと既存のコードをいじるだけです。ちなみにNAOMI側の配置は先に調べてあって、元のJVS I/Oボードの方にも方向+4ボタンの一般的なコントローラで無理やりバーチャロンを操作するための謎の修正を入れてあります。ボタンはL-Shot/Shift/Turbo/R-Shotみたいなアサインになっていて、Shiftを入れてると方向キーで旋回、ジャンプ、キャンセルができるようになる感じですね。

で、とりあえず作ってみたプロトタイプがこちら。


コントローラ用の端子は延長ケーブルを半分にして作りました。Amazonだと2,000円前後かなぁ。AliExpressで探せば300円くらいで見つかるはず。たぶんモノは同じで、少しサイズが甘い。コントローラによっては接触不良が出るので、その場合は間に1〜2mmの物を挟んで端子同士が密着するようにしてやればOKです。

そうそう、前回はたまたま気づかずに正しく間違えたんだけど、JVSの仕様書に書かれてるSeries Bコネクタの配列、間違ってますね。Zの順で1から4ではなく、左上から時計回りで1から4。USB Type Bと同じなのが正解です。


その後、基板に乗せて配線。ブレッドボードの実験からそのまま持ち込んだので、サターンのケーブルとかArduino Nanoなんかは下駄つき。これをいつものケースに入れてデコレーション。

という事で完成。JVSはUSBの電源相当の線がSense信号になってて、別口で電源用意しないといけないのが残念です。いや、他にも色々残念ですが。

ソースコードと回路の詳細についてはこちら。そうそう、僕が作っている物の改造や基板化などは、ご自由にどうぞ。質問があればTwitterとかで気軽に聞いて下さい。

Startをコインにして、L/Rを1P Start/2P Startにも配置。他の入力は1Pだけじゃなく2P側にも反映……とかやるのはありかも。JAMMAは同じような方法で1P/2Pを切り替えて遊べるようにしてます。コード的にはコイン入力SWは別口で入れてありますが、自分は面倒なので実装しなかったんですよね……でも、コイン入力ないと、まもるクンで隠しのふるるが出せない……。

2018年9月3日月曜日

7月後半から8月のゲーム:3D/G、ぐわんげ、スプライツ、ガレッガ、ほか

ゼビウス3D/G

前回の予告どおり、机に常設してる基板はゼビウス3D/Gになりました。前回のエントリで書いた気もするけど、このゲーム「STGの作品別難易度を格付けするWiki」で格付けされてないので難易度が不明。まぁ、この格付けも傾向が違うタイトル通しの相対評価がアテにならない事もわかってきたし、そもそも個人の得手不得手があるんだけど。たぶん僕にとっては25前後になる気がする。つまりは相当に難しい。まぁ、難しい原因が情報不足ってのもあるんです。それこそスペシャルフラッグ出せなくて残機足らなすぎとか、そういうレベルで辛い。全7ステージのところ、現状は5面道中までで止まってます。
それはそうとこのゲーム、20年経ってようやく気づいたというか。それなりに忠実だと思っていたPS版の移植、画面周りが大きく違っていたんですね。当時はアーケード版をそこまでやってなかったんで気づかなかったな。


上が基板で下がPS移植(をPSP上でプレイ、スクリーンショット化した物)。おそらくはポリゴン数を減らしたというよりは、グーローシェーディングを切ってるのかな。自然物は滑らかに、人工物はポリゴンらしさを活かしたデザインって棲み分けだったんだけど、むしろ全体にポリゴンらしさを押し出した移植版の方が全体的に統一感もあり、仮想空間にダイブして戦ったる感がむしろ好みとも言える。

まだまだクリアは遠そうだけど、間にコンシューマはさみつつもう少し頑張るつもり。

ぐわんげ

360版。シューティングコレクションについてるダウンロード版なんだけど、このゲームはcave作品の中で唯一Xboxの後方互換対応なのね。そんな事もあってリビングのOneや自分の部屋のOne Xでもぱっと遊べるのが利点。で、ひさしぶりに360モードを遊んでみました。んで、なんとか1CC。
回復アイテムの条件はfacebookで教えてもらったので大丈夫w

ティンクルスタースプライツ

NEOGEO miniが来たので試しプレイ的に1CC。ママん強いよ。

バトルガレッガ

M2STGにて再び真面目に練習中。ぼちぼちラス面まで行けるようになってきた。Quick Load使って6面あたりからやり直すとクリアできる事もチラホラ……って感じなのでクリア近いと信じたい。しかし、初めて6面いけるようになってから7面いけるようになるまで、1年以上かかってた。
ちなみに、こんな感じで。Xbox One版はスコアラー全然集まってなくてな。
同じくらいのスコアでもXbox Oneならベストテン、PS4だと400番付近デス。
今の所、BH mkIIがワンコイン最高記録でございます。

ストリートファイターV

なんか安売りのタイミングで買ってしまった。自分は格ゲーのコンボっていうと鉄拳2のポールで10連コンボやってたくらいで。月華の剣士もそれなりにやってるけど、ほぼほぼコンボなし。それと比べると最近のゲームのコンボはタイミングシビアだなぁ……って感じで苦労してます。まぁ、今どきリュウとか使ってるのもいかんよね。みんな対戦慣れしてるキャラだろうし。