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の麻雀配列は何でテストしたら良いのやら……。

2018年2月17日土曜日

MVS入手の話とステレオ化

MVS(いわゆるNeoGeoの業務用基板)を入手するのに色々と調べていたら、国内だと安いタイプでも1万円以上が相場らしいのだけど、中国から輸入すれば6〜7千円くらいで済むことがわかった。出回ってるタイプはMV-1BとMV-1Cで、どちらも後期型と呼ばれる音声ステレオ出力には改造が必要なタイプ。値段にそこまで差はなく、MV-1Cの方が改造の手間が少ないのでMV-1Cを購入する事に。

そして誤算。写真を見る限り基板に日本語で注意書きとか入ってたので、てっきり日本から流出した基板かと思ってたんだけど、BIOSはしっかりアジア版でした。特に差し替えた形跡もないので純粋にアジア向けに作られた基板ぽい。しかも後期型はBIOSだけ交換しようにもDIPのソケットじゃなくSOPで要ハンダ。まぁ、これは後で気が向いた時に考えよう。

ステレオ化は色々なサイトで紹介されてる通り。


スピーカーのボリューム+用途不明8pin端子のすぐ近くにある9480Fって書いてある8pinチップが音声が出てくるD/Aコンバータになります。データシート見る限りピン割り当ては

1. 右チャンネル出力
2. REF
3. GND
4. 左チャンネル出力
5. LRCK
6. SDAT
7. BCLK
8. VCC

となってます。5〜7はI2Sの信号ですね。ここから出力を取るには、1、3、4の信号を貰えば良い事になります。上の写真では左側の奥から赤、1つ開けて黒、白とケーブルを繋いでいます。一般的なカラーに従い、赤が右、白が左、黒はGNDとしました。

ちなみに奥に寝てるレギュレータに大きくGNDと書いてあるのでそこからGNDを取りたくもなるのですが……ハンダのノリがめちゃくちゃ悪い上に、テスターで調べた限りGND通ってません。なので、ちょっと狭いけどD/AからGNDも取っちゃいましょう。D/Aが見てるGNDなので、引き回し的には理想的なGNDがとれるはず。

ケーブルはそのままRCAとかミニジャックでも良かったのですが、部品代をケチってSYSTEM-GXと同じ端子を付けてます。


もともとGX用に作ったケーブルで手持ち最後のステレオRCAのメスを使ってしまったんですよね……。

まぁ、そんなわけで音声だけでも無事にステレオ化できたので良しとします。

しかしあれだな、MVS使えばFM音源からの出力をI2Sで簡単にデジタルで捕捉できるのね。

2018年2月12日月曜日

今度は今時の新JAMMA(JVS)環境とか

なんか新JAMMAも作れそうな気がしたので、I/Oボードが作りたいがゆえにNAOMIを入手しました(なんか違う)。


元々JAMMAのコンパネ持ってた人は、旧JAMMAに変換するブリッジを通してたりしたんでしょうが、現状で考えると画面や音声はJAMMAに変換するまでもなく直接扱った方が簡単です。だって画面はVGAだし、音声はステレオのラインなんだもの。VGAも一部15kHzのタイトルがあるものの、基本31kHzで出てくれるので特に変換する事もなく現行のモニタで対応できる事が多いかと思います。(ちなみにNAOMIはDIPSWの一番左のやつで31kHz/15kHzの切り替えっぽいです。前のオーナーが15kHzで使ってたみたいなんですが、最初映らなくて焦りました。)電源は右下に見える四角が並んだ端子なので、ちょっと工作が必要。ヤフオクではAT電源改造したJVS用電源が5,000円くらいで売ってました。電源容量も十分に大きいやつだったし、下手に材料揃えて作るよりは安いかも。電源が一番お金かかるのは新JAMMAでも同じですね。

少し難しいのがI/Oボードと呼ばれる部分。見た目はUSBなんだけど中身は独自規格という代物です。主にコントローラを繋げる部分ですが、ボタンの数とかかなり融通が効くし、電光掲示板的な物に文字を表示させたりとか、外部機器との通信一般が行えるようになってます。まぁ、ざっくりHID/USBで出来ることをもっと簡単に実装したもの、だと思えば良いです。タイミングが悪かったんでしょうね、新JAMMAはUSB1.0と1.1の間に制定されたようなので。USBがまだ海の物とも山の物ともつかない頃の話です。USBがここまで成功するとわかってればそのままUSB使ったんでしょうけど……いや、でもなんでコネクタだけ採用したんだろう……闇だ。

で、このI/Oボード、旧JAMMAより難しいってだけで、最近の技術と比べれば簡単な部類。それこそ本物のUSBよりずっとずっと簡単です。そんなわけでArduino Nanoを使って試しに自作してみたのがこちら。


Arduinoの足をポチポチっと短絡させれば入力が入ります(笑)。デバイス名とか適当。写真撮った時はver0.1だったけど、最終的に0.9にしました。名前はIONA。なんか当時のセガのアーケード基板っぽい感じに命名。

で、このままじゃ遊べないので、結局自分も手軽にコントローラを繋げる入力インタフェースとしてJAMMAの口を出すことに。


Arduino Nanoも基板に直接ハンダ付けしてしまうのが俺流!まぁ、中国製の互換機が凄く安いですしね。5個入りで2,000円以下。日本じゃ部品代にもなりません。とりあえずJAMMA側からの電源はON/OFFできるようにしてみました。あと、将来の拡張用にDIPSW付き。たぶん麻雀配線と内部的に切り替えたり、連射のON/OFFしたり。いずれバージョナップで載せそうなものは予め載せてみました。ピンの節約って事でアナログ入力にしか使えないA6/A7にアナログ値で入力。ちなみに同等の変換基板買うとお店だと5,000円より高いかな、くらい。今回の部品は手持ちの在庫からだけど、だいたい500円くらい。

前に作ったJAMMA環境と繋げることで、真のUSBゲームパッドを新JAMMAに繋げることができます。とりあえずPS4とか360のコントローラで遊べてます。外見だけ見るとなんでUSBを大げさな装置通してUSBに繋げてるんだよって感じかもしれませんが……。


そんなわけで新JAMMA向けのIOボード、GitHubの方にコードと回路の説明をアップロードしてみました。JAMMAしか環境ないけどexA-Arcadia買うんだ……って人は自作に挑戦してみてもらえると。電源必要なのが玉に瑕ですが、その気になればメガドラやサターンのコントローラを分解して中身にArduino Nanoを内蔵、とかできそうです。

2018年1月28日日曜日

アーケード環境その後

その後、77円で子育てクイズマイエンジェル2を落札しましてですね。いわゆる悪循環ってやつですか。で、CPS-2はJAMMAから音声とらなくてもラインからステレオで出てるんで音声は配線してなかったんですが、他の基板となると音声もJAMMAから取れるようにしておかないと……という事で、最初何も考えずにライン端子を追加して配線したんですが、ミキサーに入れるとノイズしかでないし画面にノイズが乗る。まぁ、配線的によろしくない事をして電源不安定になってるんだろうな……みたいな緩い感じで調べはじめたら……。

JAMMAの音声はスピーカーレベルなんですね。確かにダイナミックスピーカー直結でちゃんと鳴ってる。って事でまじめにラインレベルに落とすためにインピーダンス変換回路作るの面倒だなーって思ってたら……Amazonにお安いの売ってる。安いやつだと300円以下で、こりゃ自分で作る部品代より安いんじゃ……ってレベル。でもまぁ、今回は到着を待つの面倒だし、とりあえず動けばいいやって事でパスコン用に大量に持ってた0.1uFのコンデンサを+と-両方に挟むだけで良しとしてしまいました。

……と、これだけだと文字だけで味気ないので、少し秘密兵器の紹介。


じゃーん。AndroidのChrome上からDigisparkを経由してCPS-2のセキュリティチップを以下略〜。ただ、今回入手したジャンク基板は残念ながら暗号テーブル復元しただけでは起動してくれませんでした。たぶん。無念。

それはそうと、格ゲーの基板も手に入れてしまったりして、そろそろキックハーネスも作らないと……な感じです。

最近の魔法大作戦(2)とその後

そうだ、近況を記録するんだった……という事で、はやくもすっかり忘れてた。

その後16日の深夜、ノーミスでツムジ丸。遂にいけるか?!と思ったんだけど、緊張のあまりに手が震えまくって凡ミス連発、Stage 6.5で死ぬという残念な結果に……ツムジ丸からはボム連打しててもクリアできるくらいの余裕進行だったのにな。
すぐ近くの80位にディレクターがおる(笑)。Xbox One版ガレッガでも近くに氏がいるのを確認しております。

で、翌日17日の夜、改めてもう1プレイしたら再びノーミスでツムジ丸。今度は失敗しないように安全プレイを……と思ってたのに、やっぱりキョドりまくり。王様はタイムアウト狙いでようやく1コイン達成できたのでした。チッタだと王様はホーミングで最低でもレベル2はないと発狂までに倒せないのだよな。

という事で、ランキングは57位が自己ベストとなりました。
STG格付け的にも、今回のランク18はクリアしたタイトルの中では最高ランクになりました。

しかし、なんでちまたではチッタは弱い機体扱いなんだろう。確かに他のゲームにゲスト出演してる時は弱いこと多いんだけど、本編では自分的には一番使いやすいんだけどな。だって、ホーミングとったらゴールデンバットのボムが打ち放題だぜー。

で、魔法大作戦を1周したらガレッガに戻るー、とか思ってたんだけど、なんとなく「まもるクンは呪われてしまった!」に寄り道。とりあえず3ステージ〜ラスボス戦のバッドルートだけど1コイン。
以前やった時はクソ難しいなー、とか思ってたけど「これは稼ぎ要素」「この操作で弾消し」とか、シューティングの文脈で理解できるようになったら、クリア優先的な割り切りプレイができてどうにかこうにか……って感じ。ちなみにPS3版アーケードでプレイ。360版も持ってるけど、たまにはPS3も動かさないとな、って。

2018年1月13日土曜日

いまさらアーケード基板の環境をぷち自作

なんか基板に配線するのが楽しくなっちゃって、ついCPS-2を今更入手してしまいました。電池切れ問題とかゲーム本体以外にも楽しめそうな所が多かったので。とりあえず現状ではグレート魔法大作戦のみが手元に。で、遊ぶ環境を作ってみたので適当にまとめてみます。有り物+αなんだけど1万円程度で作れました。まぁ、ほぼ電源代。

必要になる物

  • 電源
  • RGB+CSYNC(いわゆるCGA)を画面に映す手段
  • ゲームコントローラ
ですね。コントローラ部分だけ自作して、任意のUSBコントローラを繋げるようにしてみました。JAMMAのコネクタなんかはAliexpressで10枚1000円みたいなノリで買えます。Amazonでハーネスとして売ってるやつもあるので配線で楽したい人はそういうの買った方がそんなに高くもないし楽かも。

2018年にもなってこういう記事を書いてる人はほとんどいないと思うので、このタイミングで作ろうと思ったら、どこで何が入手できてどんな感じになるのか、まぁ参考になるかな、と。


わりとコンパクト。

電源

コスパの良い定番は三和電子のSWN-7Fでしょうか。
  • +5V 7A
  • -5V 1A
  • +12V 1A
となっており、出力としてはギリギリの線ですね。基板によっては足らない事もありそうです。JAMMA的にはこの3つの電圧が必要ですが、CPS-2だけ考えるなら+5Vと+12Vだけで動きます(少なくともマニュアルでは-5Vの端子にはN.C.と書かれている)。

実は-5Vが不要だったらもう少し安くあがる選択肢もあって、例えばMEAN WELL RD-65Aなんかは
  • +5V 8A
  • +12V 4A
と、もう少しだけ余裕のある定格になっています。しかも4,000円くらいで買える。



ただ、電源は怖いので今回は実績のある三和を選びました。いずれ-5Vが必要になる日が来るかもしれないし。購入に際しては、お店によって値段が2割くらいは違うんですが、今回は安定の千石電商にて。オンラインにもありますが、店頭なら1号店の1階、スティックやボタンなどアーケード関連部品が置いてあるエリアにひっそりと白い箱に入って置かれていました。6,500円。ただ、後で気づいたんですがこのSWN-7Fも実はMEAN WELL社製っぽいですね。裏面にきっちりMWのロゴが入ってました。なので、どちらでも一緒だったかな。

RGB+CSYNC

とりあえずお手軽に実現できる方針は2つ。1つはアップスキャンしてVGAで映す方法、もう1つは15kHzのままコンポジットかS端子に変換して、これらの入力を持つモニタに頼る方法。それ以外にも昔ながらの15kHzのVGAが映るモニタを入手してCSYNCからVSYNCを分離して突っ込むって方法もありますが今回は触れません。最近は小型で1万円以下の液晶が色々と手に入り、15kHz対応している物も多く存在するようなので、今でも有効な選択肢かもしれませんが……やはり大きいモニタで遊びたいですしね。

アップスキャンしてVGA

SODIALから出てる高清解霜III代ってボードが安くてお手軽。普通はこの手の製品は5桁の価格帯なんですが、こいつはなんと2,000円ちょっと。日本でも扱ってるお店はボチボチあるようですが、もう少し高めの値段のようです。昔のPCのアップスキャンにも使えそう。入力はVGAだけじゃなくCGAも食ってくれるので、VSYNC信号を分離する事無く、JAMMAから配線だけで繋ぎ込めます。使ってみた感じ、遅延も少なく画面も綺麗だったのでお勧め。とても2,000円とは思えない。



コンポジットかS端子に変換

昔は秋月に行けばエンコーダーのチップが手軽に入手できたんですが、今はわりと手段が限られてきてるようです。チップさえ入手できればそこそこ簡単に電子工作できるのですが、今回はなんとaitendoさんの特売品を発見。たったの999円でCGAからS端子にエンコードできます。これを利用しない手はありません。8-15V電源でマニュアルによれば最大消費電力1.5Wですので、12Vの電源を流用しても最大0.125A程度と安心です。コンポジットが使えないための特売のようです。確かにコンポジットで繋げるとそれなりに画面は出るものの水平方向に激しく乱れます。

VGAより画質は劣りますが、S端子なら気になるほどの劣化ではありませんし、そのままブラウン管モニタに突っ込めば遅延が皆無というメリットも。液晶モニタを使う場合にはモニタ内で変換が発生しているはずですが、ディスプレイドライバの作りによっては外でVGAにアップスキャンするより低遅延の可能性も。ただ、手元のディスプレイ2台で試した限りは遅延は同程度か、下手をすると大きいくらいでした。あと片方のディスプレイでは垂直方向に揺れてました。ディスプレイ側のインタレース処理がおかしいのかも。

現時点で在庫数156の売り切り処分品のようなので、RGB 15kHzを出力する何かを持ってる人なら今のうちに確保しておいて損はないかもしれません。ちなみに表示中の画面を近くから写真で撮ったものがこれ。まぁ、多少の滲みはやむを得ないですね。



ゲームコントローラ

遅延が気になる人には受け入れがたい選択かもしれませんが、まぁ追加1フレくらいいいかなって人にお勧めかもしれないのがUSBから変換する方法。探せばこれも既存品ありそうですが、細かいカスタマイズできると嬉しいのと、SBCが有り余ってることから自作する事にしました。

使うことにしたSBCはOrange Pi 2G-IOT。選んだ理由は512MBと少ないながらもNAND flashを内蔵していてそこから起動できる事、USB OTGから電源が供給できるって程度に消費電力が少ない事、USB入力が可能な事、安いこと、などが上げられます。購入はAliexpressにて、送料合わせて1,475円です。

NAND flash内蔵は地味にありがたく、SD CardからLinuxを起動しようとするとだいたい30秒から1分くらいはかかってしまうのですが、NAND flashからの起動は8秒そこそこ。systemd-analyzeを使って最適化を進めると、だいたい電源投入から5秒でコントローラの変換ロジックを起動するところまで漕ぎ着けます。これなら基板の起動を待っている間にはreadyになります。

また消費電力が小さいので基板用の5V電源をそのまま流用できます。電源ピンは出ていないのですが、回路図を見て試した限り、ピンヘッダの5Vから電源供給できました。

あとは自分で作ったブリッジが中で動作していて、自分の持ってるUSBコントローラが刺さると適切な変換マップを通してGPIO越しに入力信号を出力。この出力をJAMMAに繋ぎこんでます。一応ソースはGitHubに置いてあります。C言語が読める人なら自分向けに書き換えて使うことも難しくないかと。Orange Pi向けの3種類のツールが含まれてて

  • GPIOに繋いだコントローラをジョイスティックとして/dev/inputに見せる
  • 同上をUSB OTGを使いUSBのジョイスティックとしてPCなどに見せる
  • USBに繋がったコントローラの入力をGPIOに出力する
といった事ができます。自分はだいたいこの辺りのコードを使ってXbox360用のコントローラを使いまわしてる感じです。

まとめ

そんなわけで、安く仕上げようとすると
  • 電源 4,000円
  • CGAからS端子に変換 1,000円
  • コントローラ 1,500円
って感じでしょうか。コントローラは上記の変換基板を作っても、安い360用のコントローラを手に入れて改造して直接繋いでも、だいたい似たような値段ですね。

2018年1月6日土曜日

最近の魔法大作戦(1)

昨年やったゲームについて、まとめて書いたら結構忘れてたので、今年は定期的にメモする事に。

とりあえず魔法大作戦の近況。ほぼほぼ5面ボスまではノーミス進行でいけるようになりました。ただ、ノーミス進行で行くとだいたい5ボスは発狂モードスタートになるんですよね。


こんな感じで。それでもたいていは0〜1ミスで6面に入れて、残機的には5〜6機、その後クリアまでには120万で増えるので余裕の進行のはずなんですが……未だにクリアできてません。だいたいボスラッシュのどこかで変な死に方して火力が落ちて復活できなくなっちゃう。5ボスからQuick Loadして練習してると、2〜3割はクリアできてるんでもう少しだとは思うんですが。

6ボスの王様を倒すのに最低でもホーミング2つは維持していないと、キャンディー+パンチ攻撃の発狂に入る前に倒せず、地獄を切り抜けられずに終わる。練習した感じ2〜3機あれば発狂してもボムでゴリ押しできるんですが、なかなか本番ではうまくいかない。あとは第1形態のままタイムアウトを狙う練習もしてみたんですが、時々位置合わせに失敗して死ぬので、やっぱり2〜3機ないと怖い感じです。その後の6.5面も運要素でかいんですよね……変なパタン(左手を姫と一緒に画面左に伸ばして盾にしてくる)がくると倒せない。これもボム3あればゴリ押しできるんですが、なかなか……。

M2STGシリーズの特徴としては、各ステージの練習モード的なものはついてないけど、Quick Save/Quick Load機能を使って効率よく実践的な練習ができるのが特徴。うまく利用すれば大幅に練習時間が短縮できるので、時間のない年寄りには嬉しい限りです。自分の場合、ノーミス進行の間だけステージ頭、ボス戦入りでQuick Saveを続け、ゲームオーバーになったら最後のセーブポイントからQuick Load。またノーミスの間だけセーブを続けます。繰り返すうちに徐々にQuick Loadの回数が減って、いずれはノーミスクリアできる……はず。終盤になると本来30分かけて練習箇所まで辿り着くところをショートカットできるので、練習時間は大幅に短縮できます。自分のやり方は楽器で曲を練習する時と同じ方法です。「シューティングがうまいやつは楽器もうまいのだ」というミカド店長の言葉が身にしみます(笑)。

ガレッガの時はノーミスってわけにはいかないので「うまくいってる間」という曖昧な基準でやるほかなく。進行によって全然ランクが違うので練習の矛先がうまく定まらないって問題がありました。後半で詰まると前半のランク調整を見直す……なんて作業も入りますし。魔法大作戦の場合はランクの影響はそこまで大きくないのですが、ボスパタンのランダム要素が大きいので、直前からやり直ししてばかりいると別パタンの練習ができないって問題はあります。特に5ボス、6面最初のドラゴンあたり。ドラゴンが安定しないのが今現在最大の課題かも。


現状でのベストは王様で死んだ137万でランキング76位。この時とは別の時の写真だけど、だいたいこんな感じで王様の餌食です、ハイ。