2018年8月5日日曜日

NEOGEO変換器をケースに入れた

前回のエントリで書いたNEOGEO mini用USBコントローラの先にアーケード環境用のコントローラを繋げてみたところ、かなり快適に動いてるので壊さないうちにケースに入れる事にしました。入れる前はこんなメデューサな感じ。電源ランプは光らせたいからあるわけじゃなくて3.3V作るための手抜き。こんな電源でもカスケードして繋げた高橋くんとかアケコン側のLEDもばっちり駆動できる。


ケースは高橋くんの時と同じもの。というか、まとめ買いストックから。ちゃんとネオジオらしくデコらないとね。


というわけで、変換先は我が家の標準仕様端子にしたので、そのまま本家本元のコントローラが使えるようになりました。まぁ、この辺りは我が家のアケコン用インタフェースにNEOGEO互換を採用した頃からの伏線。


とは言っても、この本家コントローラもボタンは押しにくいので、実際には魔法大作戦コントローラのほうを使う事になりそうですが。

あまり格ゲーやらないので下手っぴなんですが、ヘタなりに月華の剣士はそこそこやってたので変換器のチェックも兼ねて通してプレイ。デフォルト設定での1コインクリアには少し届きませんでした。


2018年8月4日土曜日

NEOGEO mini コントローラ

NEOGEO miniが届いたので即日解析したわけだけど。当初はガッツリ遊ばれたくないからコントローラの数出してないのかなぁ……とか思ってたけど、なんか本気でプロテクトかけてるわけじゃないし、単にType C周りのバグでケチがついてコントローラと本体にマイナー修正、それ終わるまでインターナショナル版は出荷OK出せない……とかじゃないだろなー、みたいな。そんなわけで、悩むほど複雑じゃなくて誰がやってもすぐ情報は割れてしまうだろうな……調べた結果は出しちゃっても平気かな、って。まぁ、いずれにせよ良さそうなタイトルはアケアカで買うのが良いですよ。という事で、以下に情報。

コントローラ側についてはType CのCC信号を正しく処理してなさそう。内部的にはUSB 1.1フルスピードで話していて、D+/D-/GNDだけ結線されれば会話可能です。が、CC信号が処理されてないためか正規のType Cホストは信号を通しません。Type CメスからType Aオスに変換するタイプの変換器を通すと(変換器の作りに依存するかもしれませんが)Type Aのホストと話せるようになります。

正規コントローラは起動後一通りネゴして動作開始した直後、もう一度再接続をかけて、2回目のネゴでは別のVID/PID、デバイスデスクリプタ等を返します。HIDレポートのフォーマットも違うんですね。特に認証やプロテクトに関わる処理でもなさそうなので、これは良くわからない。というかHIDレポートも使ってない変な情報が多くて、正しく理解せずにどこかからのコピペで動かしてる?いずれにせよ、基本はこの2つ目のデバイスのマネをしてやれば本体は認識します。Wiresharkあたりで情報見ればあとはすぐ。

この時点ではUSBの信号をロジアナ経由でUSBプロトコルアナライザにかけてました。最初に一瞬見えるデバイスでネゴシエーションでも必要なのかと思っていたので。調査にはLinuxを内蔵させてるアケコンを使っていて、SSHでアケコン内にログインしながらUSB Gadgetドライバを試行錯誤で書き換えながら調整。USBのコントローラとしての挙動を好き勝手に書き換えて、本体側の反応を見てみるわけです。わりとどうでも良いと思ってた差異に反応して弾いてくるんだよね。

次はV-USBで変換器作れるように、最小限の構成を手探りで探す。HIDレポートのフォーマットを必要最低限にすると、なぜか左右入力が効かなくなるとか。良くわからない問題もあったりしたけど、たぶんこんな感じで。この結果を反映させたV-USBを使ったコントローラねぎ塩はロースピードできちんと動いてくれました。
という事で、あとは煮るなり焼くなり。もし本家の商売の邪魔になるようなら情報は即座に消したいと思いますので。権利者の方、こっそりご連絡ください。

2018年8月1日水曜日

ホリパッドFPS+を改造してアケコンを寄生させる

背景

最初に作った360コントローラベースの基板用コントローラ。中にLinuxが入っていてUSB GadgetモードでPS4のコントローラとして動作するようにもなっていたんですが、PS4のファームが更新される度に8分認証等が厳しくなる様子だったので、安心のため既存のライセンスされてるコントローラを乗っ取って接続する方針に変更しました。ベースとして考えたのは、わりと安くて定番でもあるホリ製のFPS+。良くも悪くもホリパッドは既にコントローラの代名詞ですし。実は自分、このパッドでPS4の魔法大作戦も1周しておりますので、遅延に関しても自分としては納得の範囲というわけです。また切り替えでPS3とPS4どちらでも使えるのも大きな利点。

基板配線


左の肉球みたいに赤丸ついてるところの大きい円。ここに記号の4ボタンに繋がる信号が出てました。BU/BD/BL/BRはそれぞれ、ボタン上/ボタン下/ボタン左/ボタン右の意味だと思われます。とても親切。そのまま△×□○に対応します。また小さい円2つにはR1とR2。こちらも印字の通りの信号です。また縦長の円のJP2には、上から順にR2、AD、R1と書かれており、R2とR1はこちらから取っても同じです。すぐ近くのJP3からも同じ信号が出てた気がします。ここで出ているADが基準電圧になっており、ボタンを押した事にするには、各信号をこのADと同じ電圧にしてやる(つまりショートしてやる)必要があります。R1だかはデジタルではなくアナログ入力なんですよね。また写真には写っていませんが、反対側にはL系の信号もあります。ADは共通のはず。また右端にある赤丸、ここのパッドには信号名が一切書かれていないので文字を入れておきましたが、画像の通り、上下左右の十字ボタンの信号がここに出てきています。

これ以外に、PSボタン、SHAREボタン、OPTIONSボタン、パネルのタップなどがありますが、これらは基準電圧ではなくGNDにショートさせる必要がありますので、一緒に使おうとすると少し面倒です。どうせアケコンでは使わないようなボタンなので、私は配線しませんでした。ちなみにOPTION、TAPDなどから対応する信号が出ています。SHAREボタンとかは基板の表側から引っ張る必要があってさらに面倒そうでした。アナログスティック部分も無視。


こんな感じで線を引っ張り出して、D-Sub 2列15ピンの拡張NEOGEO配置で繋いでいます。端子はケースを加工して裏から出します。



JAMMAのコントローラなんかではGNDにあたる信号が基準電圧(確か2Vくらいだった記憶)になっている事に注意して下さい。ショートさせるだけのタイプのボタンなら問題ありませんが、それ以上の事を期待してるコントローラだと正常に動作しないばかりか故障や火災に繋がりますので。このざっくりした説明で意味が分かる人だけどうぞ。

使用感

使えるボタンが十字ボタン、記号ボタン、LRの1/2ボタンに限定されてしまうわけですが、M2STG系のシューティングで遊んでる限りはこの範囲でコントローラのカスタマイズができるので、別段困ってはいません。最悪、ホリパッド側のボタンもそのまま有効なので、万が一コイン投入やらで必要になればオリジナルから補助的に操作すればいいだけの話。

また、ホリパッドには連射機能が搭載されているのですが、この連射切り替えは外部に繋いだアケコンに対しても有効でした。つまり、これらの信号から拾った入力よりも後で連射部分の信号加工をしてくれているようです。まぁ、普通に考えればそうなってるとは思いましたが。無事に動いてくれたのは嬉しい。

という事で、たいした情報じゃないですが、参考まで。

2018年7月27日金曜日

育児休暇で三ヶ月がっつり会社を休んだ話

自分の直前に育休を取得していた同僚がエントリを書いていたので、自分も制度の普及の助けになれば、とエントリを書いてみます。そしていざ書いてみたら文字ばかりで面白みがなくなってしまったので、写真をちらほら追加。


休暇中に妻が作ってくれたマグカップ

我が家の子育て状況

前職で2人、現職でさらに2人の子供を授かりました。妻は漫画家で元々は共働きでしたが、2人目が喘息で保育園に預けられなくなり、連載を段階的に切り上げ、現在は専業主婦としてやっています。

育休の報告は色々ありますが、4人の子供を持つ例はあまりみないので参考までに。上の子達はある程度大きくなり自立してきてはいますが、大きくなったなりの別の手助けが必要だったりはします。

会社の制度としては3人目の時は育休は1ヶ月でした。それが昨年あたり他の海外オフィスと同等の福利厚生水準に引き上げるべく3ヶ月に変更になりました。今思うと4人の子供がいる状況で1ヶ月で仕事に復帰するのはかなり大変だったと思うので、タイミングの良い制度変更に感謝しています。

思うに本社のあるアメリカでは、国を出て単身で留学し、そのままパートナーを見つけて海外生活を始める夫婦も多いのではないかと思います。言葉も文化も違い、親や親戚の助けも借りられないまま子育てをする。それが当たり前の国だからこそ育児サポートも手厚いのかもしれません。日本ではまだまだ家庭を女性に丸投げして会社の事だけ考えていればよかった世代が現役で、影響力も強いです。男女雇用機会均等法なんていう当たり前の事を言った法律が、ファミコンより新しいものである事を思い出すべきでしょう。お茶汲みしかさせてもらえずに大学に戻って教授になった優秀な女性の話を直接の上司から聞くこともありました。変化にはまだ少し時間がかかるのかもしれません。この辺りについては最後に育休中の事件・感想として少し意見を添えました。

長女(小学5年)

月曜日 20:00:SAPIX 迎え(行きは子供だけ、帰りは夜遅い電車と夜道が危険なので)
水曜日 20:00:SAPIX 迎え
金曜日 20:00:SAPIX 迎え
土曜日 15:50-18:00:ヤマハ音楽教室(個人・グループ) 送迎(遠いので車が必要)

これらの送迎は、もともと僕の担当でした。また長期休暇中には集中的に勉強をみてやったりしていて、わりとガッツリ時間を取られます。
もはや妻より大きい……

長男(小学3年)

水曜日 16:10-17:25:ヤマハ音楽教室(グループ) 送迎
木曜日 16:30-18:30:SAPIX 送迎
土曜日 16:00-16:40:ヤマハ音楽教室(個人)送迎・付き添い

水曜、木曜の送迎は時間が早いため、妻が担当していました。土曜は長女の送迎とセットで僕の担当です。

末っ子として育った時間が長く、三つ子の魂的には末っ子マインド。早生まれでもあるため、甘えん坊で常に次女と両親をとりあっている真正かまってちゃん。学校でもよく問題起こして先生から連絡が……。
わんぱく男子って感じで、いつも苦労させられます

次女(2歳)

習い事もないけど、学校(幼稚園)もまだなので一日中甘えて大変。多少の一人遊びはするようになったけど、基本はスーパーかまってちゃん。つい先日まで末っ子だったわけだからなぁ……。子供たちの中では一番行動力があり、なんでも自分でやろうとするのだけど……年齢ゆえに失敗ばかりで、それがまた手がかかる。上の子から順に、育った家庭環境が賑やかになるにつれ、より賑やかな子が育つようになって……大変です。

出産前にあまり手がかけられず、劇場版ドラえもんをひたすら見せていたら、すっかりドラえもん好きに。買い物の際にも自転車の子供シートからはいつもドラえもんの歌。「空を自由に〜」を「そーんなっ、ずーるい!」と歌うのが面白い。っていうか、一通り見せても一番気に入って歌ってるのは僕らが聴いた昭和時代の主題歌なんですね、不思議。右側の絵はドラえもんではなくドラミちゃんらしい(劇場版では出現頻度高いからなぁ)。

次男(0歳)

今回産まれた第四子。流石に四人目ともなると、あまり赤ん坊を育てる苦労は感じてないかも。すでに夜はしっかり朝まで寝てくれる。幸いな事に、4人育てて夜泣きで苦労したのは本当に数回程度。その点では楽をさせてもらっています。僕自身が毎日朝から晩まで泣き続けの赤ん坊だったらしいので……なんか申し訳ない。

出産前

3月頭、子供のピアノの発表会の最中に妻の体調が悪くなり、そのまま病院へ。切迫早産で陣痛が数分間隔のところまで進み、経過によってはこのまま産むしかない、という状況でした。その後、回復して家で過ごすことができましたが、基本的には絶対安静のため、この時点から5月の出産までが僕的にはもっとも辛い時期でした。

ちなみに妻は早産体質で、1人目の時には半年入院。2人目はさらに早い時期から切迫早産を診断されていたのですが、上の子が小さかったこともあり、長女と一緒に妻の実家で自宅療養してもらっていました。当時はスパコン京の開発の大詰めだった事もあり、僕は仕事に打ち込まざるを得ない状況でした。働く人間が出産・育児にどう関われるのかは、本当に仕事次第だという事を身にしみて感じています。

3人目からは病院が変わり、前回まで切迫早産だった事を伝えても「そんな兆候はないから普通に生活して良い」と言われていたのですが、半信半疑だったので半年くらいは必要ない限りは寝たきりの安静生活(最低限の家事のみで外出は控える)をしていたと思います。この時に切迫にならなかったので4人目でも兆候がないと言われた時は「もう大丈夫かな」と思い、プチ安静生活(子供の行事くらいなら外出しちゃう)をしていたのですが、やはり体質は体質でした。冷静に考えてみたら3人目の前に1度不幸な結果もあったので、慎重であるべきだったのかもしれません。

この時期の基本戦略としては、金で解決できる物は金で解決し、どうしても足りないところでは親やママ友の助けを借りる、というものです。具体的には、平日昼間にある習い事と家事が問題なのですが、

・長男のヤマハ(グループ)→週一で親に来てもらい、送迎や家事で助けを借りる
・長男のSAPIX→送迎でママ友の助けを借りる
・家事→お弁当や出前、外食などを積極的に利用し、金で解決

で、なんとかしていました。同僚からは家政婦を複数人雇って……なんて例も聞きましたが、状況とタイミングによってはそういう選択も、背に腹は代えられない、と飲むしかないでしょう。多くの問題は金で解決しても自分の時給よりは安く済むはずなので、時は金なり、冷静に損得を判断します。相談すればこの時点から会社を休むこともできたでしょう。流石に有給にはならないと思うので、そこもメリット・デメリットを考えて判断します。

仕事の方はこの時期、新機能のローンチを1つと、数ヶ月がかりの大規模リファクタリングプロジェクトを1つ受け持っていました。どちらも片付けて休暇に入るつもりだったのですが、前者はローンチして育児休暇に入ったらトラブルが発生してキャンセル、要事後対応。後者は切迫早産トラブルで踏ん張りがきかなくなり1/3ほど作業を残した状態で時間切れになってしまいました。想定された事ではありますが、なかなか予定通りにはいかないものですね。

この時期、本務以外の業務では、真鍋大度さんとのご縁でPerfumeのReframeに会社として協力・取材させてもらったりもしました。インディーズ時代からPerfume推しだった身としては貴重な機会でした。この件に関しては同行した同僚が公式ブログに書いています。

あとは妊娠と並行して決まっていたバンマスを務めるバンドのライブ本番ですね。出産と日程が被らないよう、それだけは神様に祈るしかありませんでした。もともと妊娠がわかった直後に日程を決めていたので余裕を持っていたはずなのですが、早産の場合はその限りではないので……。

また、個人的には4月から大学院博士課程に復学する事になっていたため、その負担もありました。必修科目の聴講は一発で単位を落とす(ブラック!)とかあって流石に外せませんでしたが、研究室のミーティングなどは指導教官に色々と配慮して頂き、出産後まで研究室での活動は保留させて頂きました。

最初の1週間

妻と新生児は病院で生活、仕事は育児休暇をスタートさせてもらったため、かなり余裕を持って過ごすことができました。

この時点から育児休暇の意図を汲み取り、 時給のことは忘れて家事の一切を自分で引き取りました。この時点で、20時の長女の送迎と、そのために2陣に分ける必要のある夕食が、結構な手間である事がわかりました。1人だと常に2歳児を連れ歩く必要がありますし、時には小3男子も独りで留守番させようとすると泣き出します。

また、子供たちを連れて毎日病院へは通いましたが、2歳の次女にとって母親が不在の生活は、退院までの数日間が本当に我慢させるギリギリの限界でした。特にゴールデンウィーク後半の出産だったため、上の子達が学校へ戻ると、家の中では父娘二人だけの生活。今まで賑やかだった分、これはそうとうに寂しかったようです。切迫早産の頃から母親と一緒にお風呂に入れなくなっていた事も寂しさを助長していたようで、母親退院後も毎晩お母さんとお風呂に入りたいと泣いていました。

それでも、毎日1〜2時間は自分の時間が取れたので、仕事のメールを確認して、問題となった機能のローンチをキャンセルして、関係各所に今後の相談をしたり、資料をまとめたり……といった事後処理はしていました。この時点ではまだ育休中もメールくらいは読んで行こう、と思っていました。

医師たちの苦悩が読み取れる出産待合室の書架


その後〜最初の1ヶ月(5月)

妻が退院すると、楽になった部分もあり、大変になった部分もあり。特に洗濯物の量は2〜3倍に膨れ上がっていきなり負担が大きくなりました。家事の中では洗濯物とか食事の後片付けは工夫の余地があまりなくて好きになれなかったんだけど、妻はこの手の仕事も嫌いじゃなかったようなので、産後の体調回復に合わせて、このあたりの家事から手伝ってもらう事に。次女のメンタルも徐々に安定してきて、毎日次女を連れてあちこち買い物に行くのがお互いにとっての癒やしでした。妻が家にいることで、今までの外出する度に子供全員を連れ出して……みたいな事が必要なくなったのは非常に助かりました。

研究室へ顔を出すようになり、運動会があり、振替で学校が休みの日に子供をピューロランドへ連れていき、続くピアノの発表会の準備に……という流れで疲れがたまり、仕事のメールを読み続ける、という目標はこのあたりで頓挫しました。一度溜まったメールはなかなか処理する気になれない。一応、ヤマハの待ち時間とか利用して消化を試みたんですが、全然追いつきませんでした。職場で処理してると気づかないけど、メール処理だけで毎日1時間以上は使ってたようです。

運動会では白組のマスコットを長女がデザイン、でも長女は赤組

また、ある程度は覚悟していましたが、子供たちの予想以上の赤ちゃん返りに苦労しました。特に上の二人の子まで甘えはじめるとは……。出産前に色々と家のことを手伝ってもらったり、我慢してもらっていた事の反動でしょうか、出産後の安心から家族全員の心が不安定になっているようでした。塾の送迎と買い物、料理だけで毎日の時間が飛ぶように過ぎていきます。僕自身も長期に渡る疲れと安心による油断、また出産準備で中断していた活動の再開と重なり、大いに疲弊していたのですが、誰かを頼るわけにもいかず「皆が狂うからワシは狂えない!」と、ウィリアム・ブレイクの天国と地獄の結婚ばりの気持ちでアーケード基板の購入と修理を続け、心の平穏を維持します。

2ヶ月目(6月)

6月になると大学の必修講義もあり、週1〜2回は大学に通うようになりました。以前から進めていた研究内容を振り返り、資料にまとめて深掘りする作業もはじめました。

この時期になると妻の産後1ヶ月検診も無事に終わり、食事の準備も交代でやるようになってきました。育休後の事も考え、3ヶ月目には仕事に復帰した時の生活パタンの練習ができるよう、この2ヶ月目で徐々に役割分担を元に戻して行くことにしました。この月は主に妻が頑張り、僕の負担が軽減されてきた月です。

育休中の個人の目標としては増加傾向に転じていた体重を再び出産準備前の状況まで戻す、というのがあったので、ダイエット活動も開始しました。具体的には塾の送迎の合間にコナミスポーツへ通ってランニングと水泳。ついでに帰りには下のスーパーで買い物をしてくるという。ストレスで痩せる人も多いようなのですが、僕の場合は基本忙しくなると睡眠削ってチョコでやる気を加速されるため、忙しくなると必ず太ります。お腹を壊しても食べる量が勝るのです。通勤してる時は福利厚生で会社近くのジムが利用できるのですが、自宅付近から通うのは時間の無駄なので……今回のジム費用は福利厚生で会社の健保に請求できるはず、たぶん。

ゲーマーにとってKONAMIに金を落とすのは一種のステータス
(例えKONAMIが変わってしまったとしても)

また、個人的にはこの月にもバンドのライブ本番がありました。こちらも妊娠初期からスケジュール調整をしていた件。出産後落ち着いた時期という事で設定してもらっていましたが、難易度の高い曲を多くやっているバンドでもあり、深夜の個人練習に苦心しました。ギターの1人はプロとしてバリバリ活躍してるので、ご用命の方はぜひ。

3ヶ月目(7月)

育休最後の月という事で、復帰後の生活の練習を想定していましたが、平日昼間の塾の送迎を試してもらったのは中旬以降でした。結局、下の子は僕が家でみてたりして、最後まで復帰後の状況にはなっていないのですが、首の座っていない乳児を無理して連れ出す必要はないかな、と。

妻に家事を返していっている分、戻ってきた時間で大学の研究を進めていきました。主にLinuxのカーネルをいじる作業ですが、必要な部分を理解してデザインを決め、修正を試す……くらいはできました。あと複数の先生方とミーティングを持ち、フィードバックをもらったりとかいう博士課程で必須になっている工程なども。研究に関しては同じ時期に学生をやっていた世代が先生になったり技術者として第一線で活躍していたりと、相談相手に苦労しないのは有り難いと思っています。世界最高峰のメンバーは常に職場や身近な場所にいてくれます。このような繋がりがなければ、制度として認められた先生方とのミーティング以外、なかなか指導教官以外のアドバイスを得る機会はないのでしょう。

研究室の後輩で最近東大に戻ってきた塩谷先生の居室から
CPUでトップカンファレンスに通し続けている日本人は彼だけ

また、復帰直前には上の子供達が夏休みに入り、さらに生活はドタバタ……。なかなか余裕を持って、とはいかない状況であっという間の3ヶ月を終える事になりましたが、復帰に向けて体制を立て直すだけの時間はとれたと思います。これが1ヶ月だったら本当に大変だったと思う(主に、妻が)。


育休中の事件・感想など

危うく誘拐犯事件

出産直前のゴールデンウィーク、次女を連れて久しぶりに公園へ行ったら、案の定「お家に帰りたくない、もっと遊ぶ」が発動。泣きじゃくる次女を連れて自宅へ向かう途中、ご近所のおばさま方に囲まれてしまいました。普段、子供を連れて近所を歩いてて、顔もたまには合わせてると思うんだけど。やはり平日昼間に男性が泣いた子供を連れ歩いてると不審がられますね(汗。まぁ、物騒な事件も多い昨今、悪いことではないし、この手の自治活動は有り難いと思います。が、やはり気まずい雰囲気はどうにもできませんでした。

「ほら、お家でお母さんが待ってるよー」「公園また行こうねー」とかこれ見よがしに声に出したところで怪しさ倍増。わかってる。わかってるけど、他にどうしようもない。最後は携帯で妻に連絡して、見えるとこまで出てきてもらいましたorz

まだまだ育児参加するお父さんというのはネットで見るほどは普及しておらず、町で怪訝な目でみられることも多いです。一方で理解のある方からは母子以上に微笑ましそうに見てもらえます。これもまだまだ浸透していない事の裏返しではあると思うのですが、暮らしやすさという点では年々向上しているのではないでしょうか。

評価されすぎ問題

同様に気になったのがイクメン評価されすぎ問題。ちょっと学校行事に顔を出す、塾の送迎をする、たったそれだけで「良いお父さん」という噂がたってしまいます。もちろんお世辞で言っている部分もあるでしょう。しかし「うちでは無理」みたいな声も必ずといって良いほど耳にします。世の中、思っている以上に昭和から変化がないのかもしれません。長女の頃は待機児童問題とイクメンが大きく取り上げられた時期でもあったので、むしろここ数年で揺り戻しがあったようにすら感じました。

一方で心配なのが、他の専業主婦の家庭でお父さん方に過剰なプレッシャーがかかってしまう事。育児への参加は本当に会社のサポート次第です。会社によっては朝から晩までハードな課題が与えられ、それこそ家庭の協力なしでは発狂してしまうような職場も多くあります。どういった過去を持つ人達がその会社で力を持っているのか考えてみましょう。前職で心を壊す人の多くは、仕事(や会社の古い考え方)に対し妻や家庭の理解を得られていないケースに該当しました。その点だけはお母さん方にも理解して欲しいかな、と思います。夫婦でサポートが必要なのは、必ずしも家事に追われる母親だけではありません。労働時間と給与など、総合的に考えて判断しなければならないでしょう。思っている以上に日本人の平均給与は低いですし、給与と苦労の度合いが比例関係にあるわけですらありません(ほんのり相関くらいはあるでしょうが)。お父さんの頑張りも再評価してあげて下さい。共働きであればお互いの苦労を理解しあっているので問題は少ないでしょう。

また我が家では子育ての時間が足りなくなった長男の育児の際、金銭的な余裕があったわけではないので、どちらが働き続けた方が得か、という家族全体での損得勘定で役割分担を判断してきました。ある程度生活に余裕があるのなら、損得勘定だけでなくお互いにやりたいことを続けられるか、といった視点から役割分担を検討するべきなのでしょうし、我が家でも妻の仕事復帰に関してはそろそろ考えなければいけないのでしょう(というか、考えるつもりが3人目以降の子育てに入ってしまった)。この点は私の課題でもありますし、おそらく私が博士を取得できたら、妻に挑戦のバトンを渡すべきなのでしょう。

ロスジェネと少子化

4人も子供がいると、少子化との対比で褒められる事も少なくはありません。実際、自分の周りを見てみると、東大を出ている面々は流石に既婚率は高いのですが、極端に晩婚だったり、仕事が忙しすぎて子供は多くても1人が限界、みたいな話は本当によく聞きます。ロスジェネの中で勝ち抜き、大学の先生や起業家、一部上場企業に就職した、日本の未来を背負って立つような人たちの姿です。一方で自分が今勤める外資系企業では、やや晩婚の傾向は避けられないものの、2人目、3人目の子供を持つ共働き家庭を多くみます(それでもグローバルから見たら日本オフィスは子持ちが少ないのでサポート強化中だそうです)。

何度か書いたように、育児サポートであったり、子供を何人持てるか、という事には、会社のサポートが大きく影響します。私だって今の会社でなければ3人目以降はごめんなさいしていたかもしれません。この企業文化の違いが国家の将来に与える影響は、決して小さくはないでしょう。優秀な人材自体を使い潰し、その子孫まで残せないとしたら。

既に国内に先端技術はなく、世界の物価上昇からも置いてけぼりの日本。既に先進国向けのハイエンド製品を国内展開することすら難しくなっているのは薄々みんなが気づきはじめているとおりです。海外のカジュアルなおもちゃのような楽器が、国内では一気に高級品価格として捉えられてしまいます。暗い話をしたいわけではありませんし、何かを喚起するほどの考えを持っているわけでもありません。ただせめて目をそらしたくはないのです。

ロスジェネと呼ばれる僕らの世代は、ただ恵まれていないばかりか、最近では「怖い世代」として倦厭されているようです。本当に何をやっても踏んだり蹴ったりの世代ですが、せめて次の(ロストではない)世代を残し、介護などの負担を次世代に残さずに散っていけたら、と願います。

2018年7月17日火曜日

新環境用の連射装置

シンクロ連射に対応した高橋くん、初代はコントローラと一体化してたので、改めて独立した装置として作り直してケースに入れてみた。


けど、気のせいかゼビウス 3D/Gは連射してるとランクが上がる気がするので、今の所あまり必要なかったかも疑惑。少なくともソル出してるとランク上がるらしいので地上弾は最小限にしたほうが良さげ。

というか、ゼビウス 3D/Gの攻略情報があまりにも少なくて驚いた。検索しても深い話をしてるの、fj.rec.games.video.arcadeの投稿くらいしかなくてクラクラする……。

2018年7月16日月曜日

続・チッタのアケコンを作るのだ

チッタのアケコン、ようやく電気的な配線も終わらせて完成しました。


予定通り、D-Sub 2列15ピンで配線してあります。シグマ(NEOGEO拡張)互換の予定でいたが、連射装置の高橋くんをシンクロ連射に対応したため、シンクロ用に同期信号を通す必要が出てきました。そんなわけでシグマではP0となっていた(NEOGEOでは未使用の)9番ピンにCSYNCを通してます。

内部の配線はメンテを考えてファストン端子で配線してみました。今回はじめての利用。サイズの合う端子をまったり集めてたんですが、今回の制作に間に合ったので実験的に使ってみた次第。わりと良い感じ。


ボタン側はファストン端子はAliExpressで見つけたやつ。2.8mmのカバー付き50セットで送料込みで352円。


スティック側の端子は一回り大きく、マルツで購入したLTO-41T-187Nを使ってます。


配線に使った線材は、ケース外でごちゃっとしないように多芯ケーブルを使ってます。16芯で外径8mmなので、D-Subのケースにも入る大きさ。あんまり線材売ってる店はしらなくてオンラインで色々調べてたら電線ストアと九州電気が目についた。電線ストアだと細い多芯ケーブルは100m単位になっちゃって、単価は安くても最低ロットで5桁円になっちゃうのでパス。よくよく見たら九州電気のほうは秋葉に店舗があったので、こっちで購入してきました。4mで1,080円です。お店のページみて「こんな看板あったっけ?」って思ったんだけど、いつも電気街出て最初の横断歩道のところのケーブルぶら下がってるお馴染みの店でした……ありゃー、今まで何十回と通ってきたのに看板が記憶になかった。D-Subの端子とケースは秋月でお馴染みのやつです。

前回作ったJAMMAのブリッジを経由してゼビウス 3D/Gと豪血寺の闘婚をやってみましたがまずまず。格ゲーやってるとスティックのボールが外れてきてしまうんだけど、これはどうやって固くしめるべきなんだろ。あんまり固くしすぎて交換時に外れないのも嫌なんだけど。

2018年7月14日土曜日

7月上旬のゲーム:逆鱗弾

予告どおり逆鱗弾。このゲーム、タイトーメモリーズに入ってたのでPS2で少し遊んではいたんだけど。音楽めちゃくちゃ良くて好みなのに遅延ひどくて遊べねーって。廉価版で後から出荷されたメモリーズは多少改善されてるらしいので、そっちも買おうかなぁ、どうしようかなぁ……と思っているうちに基板を8k円ほどで入手できたので。格付けランクも3なので気軽にできるかな、と。

このゲーム、タイムスリップを繰り返しつつなんとなく過去のシューティングのオマージュな感じで進行してくんですよね。1942年に行くと敵が1942っぽい旋回してくる、とか。あとBGMの主題が同じでステージ毎にアレンジだけ変えてるという、もしかしたら低予算だっただけかもしれないけど、それがまた特徴でもあり好きなところ。4面とかYMOっぽさがポンコツ未来な感じでまた。キャラも東亜っぽくツッコミどころ満載なんだけど、おさげキャラとか「さよりなパラレル」っぽくて好き。

で、練習開始時には適当にプレイして3面か4面までって感じからスタート。2面の道中とボスで慣れないとボムが必要な感じ。3ボスも最終形態でボム?ってくらいボム使ってたので、わりとミスも混ざって安定せず、ランダムに残機を消費してかろうじて4面までたどり着ける感じでした。
こんな感じですね。この時点では5面とかクリアできる気がしなくて、ほんとにこれ簡単なの?とか疑ってました。

ちなみに画面はmac上でEasyCapViewerで表示したのをOBSのウィンドウキャプチャをソースにして90度回転ってので縦画面で録画できました。最近は一応練習は録画して何かあったら見返すようにしてたり。

で、YouTubeで動画探してたら、2Pから入ると火力が高い、Type-Cが最強って情報があったので試しに使ってみたら
一気にクリアが近づいた。見通し立たなかった5面も、強火でガンガン突き進めば押されることもなく安全に進めそう。むしろ他のステージより楽なくらい。
あっさりノーミスで最終面まで行けるようになってた。途中ボムが必要な箇所が残っているので、どうしても残機が潰れてしまい、最終的にはギリギリでクリアできました。もう少しやりこんでも良かったのかもしれないけど、積みゲー大杉なのでそそくさと次へ。

しばらくMC68000なハードばかりやっていたので、次はMIPSでいこうかなー、と。


ゼビウス 3D/Gを考えてます。格付けWikiにランクが載ってないので自分にクリアできる難易度なのかわからないんだけど。とりあえず久々にやったら3面で終了。コンティニューして通してみたけど……どうかなぁ、ランクが大幅に変化するゲームらしいので読みきれないところはありますね。まぁ、無理なら途中でチェンジ。


この基板、ステレオ対応したいけど手元の環境だとスピーカーレベルで2chってのが手間なんですよね。まぁ、次のコントロールボックス作る時に考えるって事で。世間的な評価はぱっとしないけど、個人的には好きなゲームなんだけどなー。特に音楽は最高。

2018年7月12日木曜日

チッタのアケコンを作るのだ

こんな感じで……

なんとなく新しいコントローラを作り始めてるわけですが、さて我が家の既存アーケード環境にどう繋げたものかな、と思案中。USBのコントローラならさっくり繋がるんですけどね、普通の環境と違って。でもせっかくだから信号直結させたい。そうなると今使ってる基板用コントローラみたいにJAMMAのブリッジを作ることになっちゃう。それも悪くはないんだけど、あの大きいコネクタをぶらーんとぶら下げてると、やっぱり重いし線が切れやすい(切実)。あと、高清解霸の新しいバージョン、数字高清解霸っていうCGA信号をHDMIにアップスキャンしてくれるボードが3,500円ほどで売ってたので、入手して新たにコントロールボックスを作り直したいなぁ……とか。

とりあえず基板が増えてきた現状、ボックスに求めてる仕様は
  • 1P/2Pのコントローラはそれぞれ外部から接続、交換可能に
  • 連射やボタンの配置換えは拙作の高橋くんを外付けする事で対応
  • R/G/B/CSYNCそれぞれにボリュームを付ける(CSYNCは彩京とDATAEAST対策)
  • JAMMAのスピーカー信号はLINEレベルに落として外へ出す
  • スピーカー信号をもう1系統外部から入力してLINEレベルに落として外へ出せるようにする(namcoステレオ基板対策)
  • TAITO F2対策(大マザー音声用-5Vと特殊なSYNCに対応できるよう調整)
  • 基板との接続はJAMMAハーネス(中華な6ボタン拡張仕様)とCPS2用キックハーネス
こんな感じ。今回、真面目にステンレス加工してケース作ろうかなぁ……と思っているので、ゆっくりボチボチ弱火で進める方向で。いや、やっぱり2歳の娘と遊んでると適当な作りだとすぐ断線しちゃうんですね(汗

で、とりあえずコントローラ周りを今の環境とやりくりしながら進めようと思いまして。ひとまずボックスとコントローラのインタフェース、これをNEOGEO互換というか、シグマ電子の旧タイプですね。NEOGEOで未使用だった配線を使って6ボタンに拡張したもの。これを流用しようと思います。シグマの現行タイプは端子の入手性が悪かったりするし、NEOGEOのコントローラがそのまま使えるのはメリットかなって。

仕様としてはD-Sub 2列15ピンで配線は以下のとおりです。

1GND
2ボタン6
3コイン
4ボタン4
5ボタン2
6
7
85V
9未使用
10ボタン5
11スタート
12ボタン3
13ボタン1
14
15

で、ここまで決めておいて、まずはこのインタフェースを取り出すJAMMAブリッジを作成する事にしました。普段は手でショートさせて済ませてるテストボタン付き(笑)。


以前コントローラ作った時は1P側用と2P側用の2種類のJAMMAコネクタが出ていて無駄に重たかったため、今回はちょっと工夫してます。魔法大作戦のインタビューの中で、堀井社長が雷電で遊んだというエピソードがヒント(笑)。

スタートとコイン以外は1Pと2P両方の信号に繋げています。コインは1P側にだけ接続。クレジット設定は普通はシェアになってると思うのでこれで問題ないはず。スタートに関してはスイッチを通して1Pと2Pどちらかに接続されるようになってます。一人で遊ぶ分にはスタートボタンさえ切り替えられれば好きな方から入れるし、いざとなったら両方のスタートを交互に押して、堀井社長が遊んだという同期ダブルプレイもできる(笑)。

これでNEOGEOコントローラや自前の互換コントローラをひとまず現行環境で使えるようになりました。

ちなみに作成中のコントローラですが、外箱はAliExpressで見つけた2,000円ほどのモノです。そこに自作の天板と千石で買ったボタン類を合わせて作ってます。ボタン類は三和を使うことが多いんですが、今回はお試しでセイミツ製で揃えてみました。全体的にチッタ色で揃ったのが嬉しい。


こんな感じで作ったものを印刷して切り出し。最初はプラ板を同様にカットして上に載せて固定してたんですが、やっぱり横から汗が入って駄目だよなーって事で、最終的にはラミネート加工した物をカッターで切り出してます。


この半透明のボタン、三和製も同様ですが、ボタンを外して中に絵を入れることができます。最初の写真は処理前でしたが、最終的にはボタン用に切り抜いた部分をさらに一回りカットしてボタンの中に収めました。

2018年7月4日水曜日

5月と6月のゲームまとめ

前回の4月(28日)までのまとめの続き。

沙羅曼蛇2


せっかく修理したので5月前半にリハビリして1周した。これは当時ゲーセンでも1周できてたんだけど、ラスボスで苦戦した。本当は2周目も頑張って一通りのBGMを聴きたいところだけど、なかなか難易度高い。


ツインビーヤッホー!


あと前回ワンコイン5面まで到達してたツインビーヤッホー!その後ワンコイン到達まで2ヶ月かかりました。死ななくなると後半のランクもどんどん上がるので、進んではランク上昇に慣れるまで苦しむ。あと慣れるとベルで573ボーナス稼ぎ始めて更にランクがあがるという……。特に5ボスとかバリアとかミカエルつけてると開幕から5 way撃ってきて確実に剥がされる。6面もザコビーのばら撒きが酷い……。
こんな感じでコンティニューしてると6面はかなり楽。
ポカミスってよりはザコビーのばら撒きが無理ゲーだった。この辺からキャプチャしながら練習してるのでスクリーンショットもある。
黒い子とその手前、スピードないとかなりきついし、未だ安定したパターン作れてない。
けど、クリアできたのでもうゴールする。
沙羅曼蛇2もヤッホー!も、ほどほどの難易度で20分程度でクリアできるの、個人的には嬉しいバランスでした。

次のやりこみ候補


68000以外のハードも動かしたい気もするけどもう少し継続。次はF3で逆鱗弾かなー、と。F3はダラ外と逆鱗弾を入手して満足状態です。


2018年6月25日月曜日

TAITO G-Net 麻雀配列

G-Netで麻雀っていうと麻雀王と兎くらいしかタイトル無いと思うんだけど、驚くほどオンラインにハーネス情報がないためか、兎が500円で大量に売りに出ているも誰も買わない。あるいはG-Netマザーの初期動作確認用に入手するくらい。

そんなわけで、ちょっくら兎の配線を調べてみたのでその情報共有。麻雀王もたぶん同じじゃないかなーとは思うけど、保証はできませんので悪しからず。

まず前提として、麻雀コネクタ、あるいは他のI/Oから麻雀に変換する場合、基本は4出力6入力のマトリクスで24種類(実際に使われているのは20種類)の入力を表現します。それぞれの入出力マトリクスの交点にスイッチを配置するだけ。デジタル回路的に理解するなら、出力は基本HIGHになっていて、4つのうち多くて1つが時分割でLOWに、そのLOWになっていた出力ピンに応じて6入力の解釈が変わるので、対応する信号をLOWにして送ってあげれば良い。

で、G-Netの場合は3P/4P用の拡張コネクタを流用しているようです。出力に使う4ピンは本来コインカウンター、コインロックアウトに使われている1番2番ピン。出力にとれるのがこれら2本しかないので、3Pと4Pを併用して4出力を確保します。入力は4P側の1レバー2ボタンを使います。コインはそのままJAMMAの1P/2P用コインが効いてるようです。

3P-1 3P-2 4P-1 4P-2
ABCD4P-5
EFGH4P-6
IJKL4P-7
MNチーポン4P-8
カンリーチロン4P-9
スタート4P-10

もし、麻雀コネクタに変換したいなら、以下のように対応させれば動作するはず。

G-Net3P-13P-24P-14P-24P-54P-64P-74P-84P-94P-10
麻雀コネクタA1B2MNPRST

自分はこんな感じで変換コネクタ作りました。入力だけ麻雀コネクタからとって、電源やら画面、コイン入力はJAMMAから。



麻雀コネクタの詳細はアーケードハーネス配線データベースさんの麻雀の項に詳しい情報がありますので、知らなかった人はそちらも参照の事。

2018年6月19日火曜日

赤が出ない基板

簡単だったやつも。

RGBで赤が出ないっていう基板。


目視だけで原因判明。TR2が取れてなくなってる。出口付近にトランジスタが3回路並んでたらほぼ間違いなくRGBの増幅回路。

表面実装の型番についてはMARKING CODE @wkiで調べるとLYが2SC2712 Grade Yだとわかる。幸い秋月でも扱ってるNPNの定番汎用トランジスタだったのでサクッとハンダ付けして修理完了。材料費5円。


写真もハンダも下手だけど完成図、そして記念撮影。


F2大マザー

今度は1200円のF2大マザー。起動しないってやつの修理に挑戦。(そう言えばTAITOロゴのAとASAHIネットのロゴ、少し似てる。僕にとってはどちらもUTMC繋がりなんだけど、何か関係あるのかな……zakさんなら知ってそう)


まずは目視で診断。このカスタムの160ピン側の角が3本ほど潰れてショートしてました。QFPには良くあるやつ。足を揃え直してハンダで補強。他にも潰れっぽいのがあったけどテスターで見る限りきちんと絶縁されてるようだったのでそのまま。

ここでひとまず電源を入れてみる……と5秒くらいで画面信号が出てくるんだけど真っ暗。仕方ないので68000のバスをロジアナで眺めてみると、普通に初期化はパスしてゲーム起動までいっているような雰囲気。

という事で音を確認。実はうちの環境、-5Vの電源はあるのにJAMMAハーネスには出してなかった。だって必要な基板今までなかったし。でもF2大マザーは-5Vがないと音が出ない子。という事で-5Vも配線して起動してみたら……音楽は普通になってた。コイン投入〜ゲームスタートできているので画面の問題っぽい。
って事で、少しやる気を無くしたんだけど、F2は同期が少し特殊で環境によっては画面がぶれる〜みたいな情報があったので、普段使ってるCGA→S端子ではなく、もう1つのCGA→VGAの変換基板で試してみると……


ふむふむ……出てるじゃないか……画面化けてるけど!そこまで難しい症状じゃないのでしばらく調べてみる事に。幸いロジックICは少なく、FFを中心に故障がないかざっとチェック。次にSRAMの塊を疑うことに。

SRAMに関しては/CSを強制pull-upしたり、/WEを強制pull-downしたりする事で該当チップがある程度予測可能。今回SRAMはIC1〜8、IC11〜18の合計16個あるわけですが、/CSは奇数番ICと偶数番ICの2系列だけでした。こいつらピクセルクロックの半分の速度で交互にアサートされて、奇数・偶数合わせてピクセルクロックで画像を送り出してます。今回、奇数側の動作を止めることでノイズが消えたため、問題は奇数番ICと判断しました。次に/WEで絞り込み。常に書き込みを指示する事で、バスにデータを出させないようにして疑似的な休眠状態を作ります。これでノイズ部分が消えたり同じ部分に別種のノイズが乗るところが怪しい。/WEから推測されるのはIC3,4,13,14のうちどれかの故障。/CSの条件と合わせて考えるとIC3かIC13の不良です。

最後はデータバスにゴミを載せて化け方を比較し、IC13の不良と判断……としたのですが……正しくはIC3だった。おかげで面倒なSRAM載せ替えを2枚分。ソケット化してたのでIC13には元々のチップを載せて、IC3だけ手元の在庫と交換しました。20年近く前に秋葉で買ったSRAM、最後の1枚。

木星に着いたよお〜       着いた〜!!(なぜ全裸?)
流石TAITO、クイズでも地球が割れる

IC3の差し替え中にうっかりIC13からIC12へ伸びてるA12の線を切ってしまったらしく画面が大きく乱れて焦りましたが……断線によってピンが浮いてしまった場合、触ると0/1揺れてノイズ乗るので問題特定しやすい。ちなみにIC18→IC11→IC1→IC8って方向にチェイン状に接続されているので、IC13からIC12への接続が切れると、IC1からIC12まで全部の足が浮きます。逆に接続は1から12のどこかのA12を13から18のどこかのA12へ繋いであげれば大丈夫。ここはソケット化した3と13と繋ぐことにしました。無駄にジャンパーorz


修理後のSRAM群。右にあるカスタム0200OBJ、0210FBCに繋がってます。アドレスもデータも両チップに分割して接続されており、両チップが密に連携してスプライトとオブジェ面を合成してる様子が伺えます。CPUから見えない場所にあるのでテストモードの診断とかでは検出されない。一応、必要なとこだけ作った雑なメモを貼っときます。


それと何かの確認で役にたつかもしれない最終的なボード写真。右下がサウンドで、左ほぼ半分が画面ですね。配線も素直だし、これくらいの部品点数なら調査も楽で助かる。値段分以上に楽しめた。



しかしチップの取り外し難しい。特にVCCとGNDのピンがハンダとれない事が多い。昔のトラ技の動画に従いヒートガンで温めながらチップを抜く……ところまでは綺麗にいく。でも残ったハンダを表からコテで温めて裏から吸引器で〜ってやってもハンダが溶けてくれずに吸えない箇所が必ず出てくる。VCCとGNDとかは常に吸い取れなくて。基板の内側に配線層があって接続されてる場合なのか、それとも電流多く流れると合金化が進むのか……。良い方法知っている人いれば教えてください。とりあえずヒートガンで温めて針形の工具で貫通させて吸い取ったりとかはそこそこうまくいってる。

2018年6月13日水曜日

飛翔鮫・修理(もうちっとだけ続くんじゃ)

遊幻さん@ヤフオクにてジャンクの飛翔鮫(伏せ字IDバレちゃう……)を入手。わりと簡単に治せると踏んでたんですが……ちょっと手こずってる。気力が続かないし、次に時間できるまで少し間が空きそうなので、軽くメモを残しておこうかと。

元の状態はオークションの写真の通り。BG面は正しく描画されてるっぽいけど、スプライト面がゴミまみれ。というかハード性能以上の枚数スプライト出てる(笑)

で、基板を見ると……


ガッツリ修理跡。しかもハンダ面めちゃくちゃ汚い。SRAMは2面対になっているうちの1面がソケット化されてて、しかも刺さってるやつオリジナルは120nsなのに200nsの遅いやつ。これは勝ったか!と思って120nsのやつに差し替えてみたけど世の中そんなに甘くない。症状かわりませんでした、残念。そのくらいは遊幻さんでも試してそう。ちなみに後に調べた感じだとこのSRAMx2はオブジェクトRAMっぽいですぞ。スプライトのパタン番号や座標なんかが出てきてる。

そしてこの頃、nosuke様の俺基板(いた)本がBEEPに再入荷してたので、先人の知恵として有り難く購入。
ロジックICも壊れるんだ、つらそー……とか他人事のように思いたかったんだけど、SRAM以外にもロジックIC何個か交換されてて。前のオーナーが怪しいと思って修理した箇所か、壊した箇所のいずれかだろうと。自分も先人に習って周辺のロジックを疑ってみる事にしました。
まじかよーって感じでインバータが壊れてた。なんかこういう故障モードは学生実験でトランジスタ描いてSPICE回してた頃に見たことあるような気がするけど、波形が鈍ってたり電源足りなかったりとか、あとゲート壊れかけてたり?そっちはあまり得意じゃなかったから自信ないけど。
って事で、スプライトは表示されるんだけど、何もないはずの後方位置に同じスプライトデータが何度もリピートされる感じ。
とまぁ、そんな感じで少しだけ前進。

ちなみにPROMはアドレスに回り続けるカウンタの値をもらってデータを読み出し、それがデコーダに入って負論理のワンホット信号が出てく感じ。シーケンサのタイミング生成的に使われてる。ここでPROMの後段、タイミング信号を受け取ってるdemuxの先を追いかければ面合成部分の論理にたどり着くかなーって思ったんだけど。demuxの信号調べてるうちにクロック波形が崩れてるんじゃないかって気がしてきて。先のNOTの故障もクロック鈍ってた影響で特性悪い個体がノイズ出してただけって可能性もある。という事でクロックツリーをテスターで追いかけてみたら、すぐに壊れたFFを見つけることができました。CLKと出力1bitが内部でショートしてる模様。実際に波形とってみたら出力がCLKに引きずられてた。そんなわけで該当ICも交換。
IC取り外すの大変なので、事前に短時間で検証できる事はやっておき、ある程度の確信が持てたら交換。
という事で、これだけでは全ては直らず。おそらく似たような故障がもう1箇所ある……。キャラが常に化けるというよりは、スプライトが何かの影に入っている時だけ縦縞が入る感じです。自機も出撃時に建物の影で縞々になる。縦縞なので同じピクセルクロックで動いてる素子だと思うんだけど……。まぁ、ロジック追って少し満足してしまいモチベーションがぐっと下がったのでしばし休憩。

今まで論理回路はチップの中ばかりみてきたので基板上の回路を追うのはちょっと新鮮だった。ほんと学生実験以来な感じ。流石にチップと比べると規模は桁違いに小さいけど、物理的な配線を追うのはちょっと手間。見えてないとこテスターで総当たりしないとだし。そして当時のシステム、わりと愚直にロジックIC積み上げただけなんだなーって。当たり前の事なんだろうけど感心。バスがそれぞれ独立してるのとかも汎用PCになれちゃってると不思議な感じ。画像データとかROM使ってると確かにCPUから読み書きする必要はないもんね。

2018年6月4日月曜日

沙羅曼蛇2用のサウンドデータ作成方法

興味持ってる人がいるようだったので、とりあえず手元でデータ生成に使ってるツール一式をまとめてみました。と言っても、データ生成はほぼほぼarm用のアセンブリでやってます。本来はm68k用を使うべきなんでしょうが、命令を吐く必要がないのでbig endianが指定できればなんでも良いのです。

ツール一式は前エントリのサンプルデータと共にGitHubにて。

data/ 以下にサンプルデータとデータ生成スクリプトが入ってます。スクリプトはPOSIX環境向けなのでWindowsの人はWSLなりCygwin、MinGWあたりを使って道具を揃えてもらえれば、と。とは言ってもpureなWindows環境向けに同等のツールを揃えることは、ある程度の知識があれば大きな手間はかからないと思います。

生成に使っている開発ツールですが、自分はmac上のbrewでarm-none-eabi-gccを使ってます。Ubuntuでもパッケージでさくっと入れられるかと思いますので、Windowsの人はWSLを使っていれば同様に簡単に環境が揃うかと。

data/gxsnd.S がサンプルデータなので中を覗いてみてください。gxsnd.hっていうヘッダの中で色々とコマンドを定義して、それを使ってアセンブリ言語向けのデータを埋めてく感じです。

先頭の.org 0x00108000はデータを配置するメモリ上のアドレスを表しており、この値はmame向けのテスト環境で前提にしている値です。サウンド用のサブCPU内のアドレスを表しており、このアドレスは沙羅曼蛇2では未使用のRAM領域です。実機で試したい場合には、既存のデータを上書きする形でROM内に配置する必要があります。また、その際にはROMチェックを通るようにチェックサムの辻褄を合わせる必要もあります。このあたりの解析情報も持ち合わせているのですが、今回はこの点については割愛。

続くHEAD:部は、全16チャンネルのデータ位置とデータ末尾を示すラベルで埋めます。この部分はいじらないで下さい。

続けてCH_1からCH_16まで、実際のデータが続きます。各チャンネルのデータは必ずENDで終わらせて下さい。またデータ末尾にも必ずENDが必要です。

データについてはMMLを知っていればある程度推測できる範囲にあるとは思うのですが、わかりにくい部分だけ補足します。

一般的なMMLでは音程と音長を組み合わせてA4などと指定するのが一般的です。またLコマンドで省略時の音長も指定でき、単純にAと書けばラの音が指定できます。一方、このシステムでは、音程に対して、音長、ゲートタイム、音量を合わせて指定するのが基本になります。A4LG(L4,100,127)と書くと、ラの音を100%のゲートタイム、音量最大127で指定する事になります。Aの後の4は音長ではなくオクターブです。また2音目以降はゲートタイム、または音長とゲートタイムを省略可能です。A4LGではなく、A4Lと書けばゲートタイムが省略、A4と書けば音長とゲートタイムが省略され、前回の値が再利用されます。ただし音量は必ず毎回指定する必要があります。この点が少し不便。音量は96が四分音符相当で最大255までしかとれません。よって直接指定するのは二分音符までとし、それより長い場合にはタイ(TIE)で繋いで下さい。タイも音長とゲートタイムを引数に取ります。音調に関しては直接数字で記述しても良いですし、gxsnd.hで定義されているL4などの文字を使っても構いません。付点はL4_などとアンダーバーで表現できます。

ドラムに関してはRHYTHM_ONでリズム音源モードというか。ノート毎に違うサンプリングデータがアサインされてるモードになります。C0からBb2まで、バスドラ数種、スネア数種、シンセタム、生タム、ハット、金物各種、色物系みたいな順で並んでます。そうそう、通常の音色もサンプリング番号+ADSRチックなエンベロープ個別指定になってます。よって沙羅曼蛇2をベースにする限り、沙羅曼蛇2のROMに入ってるサンプリング音色しか使えません。65音色くらいあったと思います。一応音色一覧的なのもあるけど主観で命名してるので環境手に入れたら自分の耳で確認してもらうほうが確か。

各コマンドの値に指定できる値は基本的には0-255の8-bitsの値になります。が、コマンドによって成約もあります。PANは1が左、8が中央、16が右でその間の値もとれます。REVERBは2つの引数ともに0-15までしか取れません。DETUNEに関してはsigned charで-128から127で考えて良いかと思います。

繰り返しについてはREPEAT_START / REPEAT_ENDで囲んで下さい。REPEAT_ENDの第1引数が繰り返し回数です。第2、第3については不明ですが、既知のデータでは0が指定されていました。

ループポイントについてはLOOPコマンドに続けて戻りたい場所のシンボル名を後続の.dc.lラインで指定して下さい。内部的な挙動はマクロ呼出しと同じですが、コマンドは別途アサインされていました。マクロについてはサンプルでは使っていませんが、CALLコマンドに続けて.dc.lでシンボルを指定すると、任意シンボル内のデータを演奏してから呼び出し元に再生位置が戻ります。これらのデータはDATA_ENDより手前、通常はCH_16の後ろに置かれ、他のデータ同様にENDで終了します。

再生環境についてはmameを流用するのが簡単です。とは言っても沙羅曼蛇2のROMを所有している必要がありますので、この点に関しては著作権遵守でお願いします。駿河屋で2万ちょっとが店頭での最安値かな?ヤフオクで見張ればもっと安く手に入ることもありますが、慣れてない人にはおすすめできません。基板環境ない人でもプラス数万払えば実機で演奏する環境も夢ではありませんよ。

mame/mame.diff のパッチをあててmameをbuildする必要があります。あるいはdebugモードで起動すれば本体に手を入れずともデバッガコマンドから再生する事は可能なのですが……実際にデータ作って〜となると面倒でやってられません。このパッチは特定アドレスにデータを読み込むフックをかけてます。実際には0x00800000を叩くとgxsnd.datというファイル名をメモリに読み、サウンドチェック用の曲ヘッダが指す先を読み込んだメモリ上のデータに差し替え、再生用のホストコマンドを入れて割り込みをあげます。

該当アドレスを叩くのはmame/cheat/salmndr2.xmlのcheatを通して行います。mame以下に「cheat 1」と書いたmame.iniファイルを置くとcheat以下の定義が読み込まれ、cheatメニューにLoad GXSND、BGM Test、Loop 1 BGMなどが追加されます。この中のLoad GXSNDを選ぶと該当アドレスが叩かれてデータの再生が始まるはずです。

BGM Test、Loop 1 BGMはおまけ。前者は曲を選んで再生できます。後者は1週目から2週目BGMを再生するハック。

ざっくりこんな感じで。何か質問があればTwitterなどで質問して頂ければ。あと、著作者からの要望があれば、前置きなく解析情報を削除することもあるかと思います。まぁ、68アセンブリ読めれば誰でも数時間でわかるような内容ではありますが。

ちなみにSilver Wings Againに使われているコマンドは0xd0以外は解析できてます。引数の数はコード見ればすぐにわかるんだけど、効果はROM書き換えながら耳で確かめたり、コード見たりでまちまち。0xd0に関しては聴覚上に違いがなかったような気もするけど、mameで確認してる関係上、きちんとエミュレートされてない部分で変化してる可能性も。他の曲でまだ未確認なコマンドだとフルタイムポルタメントとかもありそう。ROM内のサウンドデータを同ツールでbuild可能なソースに変換する解析ツールも作ってあるんだけど、コード適当だし、解析ツールについて権利者がどう思うかもわからないので、今の所公開は考えてません。

2018年6月3日日曜日

沙羅曼蛇2のサウンドドライバを攻略するの巻

とりあえず、ROMの指定アドレスからサウンドデータをデコードして、アセンブラから再びドライバが認識するデータに再コンパイルする環境を整えた。

で、実機でROM焼きながら曲作るわけにもいかないので、開発用環境としてmameをほげって、特定のアドレスを叩くとファイルからデータを読んでサウンド側のRAMに配置するような環境を用意した。実際にはcheat機能も使って、cheatメニューからLOADを選ぶと該当アドレスが叩かれ、続けてK056800経由でサウンド再生の命令が飛ぶようになってる。

現状で把握してるサウンドドライバ用の命令は以下の通り。

  • ノート(音長指定あり/なし、ゲート指定あり/なし、音量指定あり)
  • タイ
  • 休符
  • ドラムモード(ON/OFF)
  • 繰り返し制御
  • マクロ呼出し
  • パン指定
  • オートパン(指定した時間で2点間を移動)
  • 音色指定
  • テンポ指定(チャンネルごと)
  • アタックレート指定
  • ディケイ指定
  • リリースレート指定
  • デチューン指定
  • LFO
  • LFOオートメーション(深さの時間変化)
  • リバーブ(チャンネルごと)
  • ループ指定
ヘッダ情報とかマクロやループポイントは絶対アドレスで指定するので、ROM配置に合わせてデータをコンパイルしてやる必要がある。このあたり、開発環境がかなり原始的だった可能性あるなぁ……。MSX時代だとほぼほぼバイナリエディタみたいなので作曲してるっていう話もあったけど、それとMMLの中間くらい?自分はとりあえずアセンブリのマクロを使って読みやすくした状態でアセンブラかけてデータを作ってるけど。ノート毎に音量指定するのが結構面倒で、あとから音量変えるのも手間。MMLから専用コンパイラでアセンブラのソースに変換してた可能性が高いかな?



とりあえず簡単な曲を作って再生させてみた。実験の延長なので曲自体凝ったことはできてないけど。音色からなんとなく沙羅曼蛇2感みたいなのは伝わってくるかな。

FMPSGの新譜はSystem GXの実機でいきたいなぁ。

2018年5月24日木曜日

沙羅曼蛇2を2周目BGMでスタートするパッチ

なんとなく沙羅曼蛇2のサウンドCPU側のコードを眺めてました。ホストからのコマンド、初期化の手順、全体的なデータのレイアウトくらいはわかったので少しメモ。たぶん他のSystem GXも同じ系譜なんじゃないかと(ヤッホー!軽く見てみたけど、ほぼほぼ同じだった。未使用曲は等に目新しいモノはなくMagical Melodyだけだった)

ホストからのコマンド

K056800を経由して8-bits x 4のデータを受け取ります。割り込みあがったらデータを呼んでコマンドを解釈。最初のバイトが0xF0以上の時は初期化やメモリチェック、サウンドチェック用の曲の再生など、特殊な要求がアサインされてます。それ以外の場合、最初のバイトに曲番号、2バイト目にバンク番号を指定して演奏開始。BGMはバンク1に、SEはバンク2から6にアサインされてました(ただし沙羅曼蛇2だと4〜6は同一)。

特殊コマンドはディスパッチするとこまでは追いかけたけど個別の処理は全部は追ってませんが、わかりやすいのだと0xF0が基板のテストモードから入れるSOUND SCALE CHECK。内部的に[0x0E, 0x01, 0x00, 0x00]のコマンドに置き換えられてテスト用のシーケンスが再生されます。0xF9はワークエリアの初期化、0xFEは起動時のROM RAM CHECKで7C/S、9C/S(沙羅曼蛇2の場合)のチェックの実体です。本格的にサウンドプログラムにパッチあてる場合には、このコマンドが成功するように修正する必要がある。

データ構造

0x000067e4 から 4Bytes x 8 x 2のアドレステーブルがあります。前半の4Bytes x 8が1周目、後半の4Bytes x 8が2周目のBGM/SE情報で、それぞれがバンク0〜7に対応する情報を格納する構造体のアドレスです。

各バンクの情報を格納する構造体は、単純に楽曲情報ヘッダのアドレスの配列です。1周目のBGM用バンク1の場合

.dc.b $00,$00,$6a,$fc ; SILVER WINGS AGAIN (STAGE 1)
.dc.b $00,$00,$6b,$08 ; SENSATION (STAGE 2)
.dc.b $00,$00,$6b,$14 ; ALL IS VANITY (STAGE 3)
.dc.b $00,$00,$6b,$20 ; SERIOUS! SERIOUS! SERIOUS (STAGE 4)
.dc.b $00,$00,$6b,$2c ; SPEED (STAGE 5)
.dc.b $00,$00,$6b,$38 ; DEAR BLUE (STAGE 6)
.dc.b $00,$00,$6b,$44 ; DEAR BLUE (STAGE 6)
.dc.b $00,$00,$6c,$16 ; DEAR BLUE (STAGE 6)
.dc.b $00,$00,$6c,$28 ; THEME OF THE LIVING BODY BOSS (3, 5 STAGE BOSS)
.dc.b $00,$00,$6b,$c8 ; WHAT'S YOUR NAME (NAMING)
.dc.b $00,$00,$6b,$98 ; AND THEN ...... (GAME OVER)
.dc.b $00,$00,$6b,$a4 ; A THEME OF THE SALAMANDER2 (TITLE)
.dc.b $00,$00,$6b,$b0 ; BEGINING FROM THE ENDLESS (ENDING)
.dc.b $00,$00,$6b,$f8 ; SOUND SCALE CHECK
.dc.b $00,$00,$6b,$5c ; THEME OF THE MECHANICAL BOSS (2, 4, 6 STAGE BOSS)
.dc.b $00,$00,$6b,$68 ; THEME OF THE LIVING BODY BOSS (3, 5 STAGE BOSS)
.dc.b $00,$00,$6b,$c8 ; WHAT'S YOUR NAME (NAMING)
.dc.b $00,$00,$6b,$50 ; NO FUTURE
.dc.b $00,$00,$6b,$74 ; PRELUDE OF THE LAST BATTLE (LAST STAGE)
.dc.b $00,$00,$6c,$04 ; THEME OF THE GOREM (STAGE 1 BOSS)
.dc.b $00,$00,$6b,$d4 ; THEME OF THE GOREM (STAGE 1 BOSS)
.dc.b $00,$00,$6b,$80 ; GIGA'S RAGE (LAST BOSS)
.dc.b $00,$00,$6b,$bc ; ENDING - AM SHOW VER.
.dc.b $00,$00,$6b,$e0 ; NERVOUS BREAKDOWN
.dc.b $00,$00,$6b,$ec ; FIRE TRIPPER
.dc.b $ff,$ff,$ff,$ff ; [n/a]
.dc.b $ff,$ff,$ff,$ff ; [n/a]
.dc.b $00,$00,$00,$00 ; [null]

こんな順に並んでました。ホストからのコマンドで最初のバイトで指定する順です。CD等に収録されてる未収録曲もばっちりアサインされてます(が、YOU TAKAMINE版のThunderboltは見つからず)。2周目用テーブルでは1面、4面、5面の箇所に別アドレスが入っており、POWER OF ANGER、LAST EXIT、PLANET PATISを指してます。同じ曲が複数入っているのは使い分けよくわかってないんだけど、曲番号に応じて特殊な初期化が走るコードを見かけたので、たぶん状況によって曲がうまく切り替わらない時があって、その時はワークアラウンド的に強制初期化+再生が無理やり走るような仕組みになってる気がする。

各楽曲情報を示すアドレスは、12Bytesだったかの構造体になっていて、なんらかのフラグ情報とシーケンスデータのアドレスを含んでる模様。この先はまだ調べてないけど、シーケンスデータもそのうち調べたい、というか沙羅曼蛇2音源で好き勝手演奏させたい(その後の調査でだいたい理解できた。基本演奏と音色、LFO、パンくらいは好き勝手できるようになったので簡単な曲くらいは作れそう)

ワークエリア

RAMの先頭(0x00100000)からいきなりチャンネルごとのワークが並んでいるっぽい。各チャンネル512Bytesで16チャンネル分。詳細はシーケンスフォーマットの調査と合わせていずれ。

1周目と2周目のBGMを入れ替えるパッチ

一番最初のテーブルで入れ替えちゃうのが楽です。7CのROMに対して以下の2Bytesを書き換えればOK。

0x000033f5 : 0xc4 => 0x54
0x00003405 : 0x54 => 0xc4

この入れ替えだったら起動時のチェックも素通りできます。

一応、mame用のcheatも紹介しておくとこんな感じ。
<mamecheat version="1">
  <cheat desc="Loop 1 BGM">
    <parameter>
      <item value="0xc4">Loop 1</item>
      <item value="0x54">Loop 2</item>
    </parameter>
    <script state="run">
      <action>soundcpu.rb@67EB=param</action>
    </script>
  </cheat>
</mamecheat>

2018年5月3日木曜日

ジャンク遊び - naomi編

ジャンクでDIMMボードとnaomi2を入手したので少しメモ。

DIMMボード

ERROR 22が出るというボードを入手。元々PC133 256MBが1枚載ったDIMMボードを持っていたので、故障ボードからDIMMだけ抜いて2枚刺しで512MBに……と思っていたんだけど、ばらしてみたらPC100 128MB x2だったので野望はついえた(笑)。ただ、バッテリーは生きてたので今まで使ってた方に移植。

あと、実際に我が家のnaomiで起動した際にはそもそもボードを刺すと本体が起動しなくなる、という症状でした。これ、実は単純にコネクタの接触不良って事が多いみたいで、今回もばらしてみたら内部の2層基板を繋いでるコネクタが抜けかかっており、そこを刺し直したら普通に認識されました。

naomi2

いわゆる動作未確認ジャンク。ジャンクを買ったら動作しなかったので転売します、の意味のヤフオクスラングだと思ってる。

今回のnaomi2も試したら画面信号も確認できず真っ暗のまま。さっそく分解してみたら……
バックパネルのコネクタ周辺になんか焦げてるパタンが……。反対側のコネクタのハンダ面を見たら、足が曲がって隣のピンと接触すれすれになってた。おそらく最初に手放したオーナーがショートさせたんだろうな。曲がってた足はペンチで治して調査続行。焦げてるパタンの前後をテスターで調べてみたら、やっぱり断線。接続先はVGAコネクタのGND。そりゃ何も表示されないわな。という事で「安心しろ、傷は浅い」と周辺にたくさんあるGNDピンと接続。幸いにしてバックパネルは初代naomiと共通のようだったので、初代もばらして修理したバックパネルが動作する事は確認できました。

で、これで治れば御の字だったんですが、そうは問屋が降ろさず……。結局またもやチップの接触不良。ファンの載ってないヒートシンクだけの石が2つあるんですが、それを押さえてると綺麗に起動してくれる。ちょっと力加減が悪いと画面にクロスハッチ状のマスクがかかったり、スローモーションになったり、とイマイチご機嫌ななめ。力で基板が歪む事もあり、実際にどのチップのどのあたりの足に問題があるのかまでは特定困難でした。しかもBGAなんですよね……素人がリワークやったところで不具合再発は時間の問題。わざわざ修理する価値があるかは微妙なところですね。

まぁ、naomi2が動いても追加で遊べるのバーチャ4くらいだし。どちらかと言えばDIMMボードと色が揃ったケースが欲しかっただけって感じでもあるので。まぁ、いいかなー、とか。

2018年5月1日火曜日

続・【修理】System GX【4枚目】

昨日のブログの後、忘れないうちにと問題箇所の恒久的な処置をしました。とりあえずダメ元で問題のviaにハンダを流し込んでみる。するとアドレス線とコネクタは無事に電気通るようになったので、残るラダー抵抗までの配線を線材使ってパッチする事にしました。
こんな感じで、傷は浅い!外観を損なわない修理で済んでよかったー。日本ではあまり基板修理ログブックみたいなのは見かけないんだけど、海外にはあるとこにはあって(笑)以前読んだ記事にやっぱりviaの接続不良ってケースがあったので発見の時はヒントになりました。

で、この時点で試しに電源入れたら……



サウンドROM刺しても無事に起動。チェックも全部通りましたが、その後にだんまり。流石に何も思いつかなかったので、この日はそのまま作業終了。

そして翌日。ひとまずメインCPUからのチェックは通ってるので、サウンドCPU側のバスが化けててサウンドCPUが暴走〜ってあたりを想定してサウンドROMの足にロジアナ仕込もうと思ってたんですが……念の為、だんまりの後にチップを叩いて回ってみたらセキュリティチップを叩くとワーニングメッセージに進むことが判明。という事で、セキュリティチップのコマンド完了割り込み待ちで固まってる線で再調査。



重りを載せてる間は動くけど、外すと固まったりリセットかかったり。割り込み線が浮いててノイズで予期しない割り込みが出てリセットしてるとかかな?
この子。下側の右端の方が浮いてたみたい。昨日、清掃・リフローした箇所が左下だったりするので、その時に反対側を浮かせてしまった可能性も(笑)

でもまぁ、このチップ、サブボード交換の時に歪みやすい箇所に載ってるんだよね。頻繁に抜き差ししてるとこの足が浮くって故障はそれなりに多いんじゃないかなぁ。

その後、問題の箇所を再リフローする事で、重りとかなしで安定動作するようになりました。重い調査作業を想定してたけど、ものの5分で原因特定、作業自体も30分かからずに終了しました。

【修理】System GX【4枚目】

ジャンクの沙羅曼蛇2とセットでお安く入手。たまにしか起動せず、起動してもキャラ化けが酷いとの事で、まぁ起動するなら大怪我ではあるまい、と踏んで甘くみておりました。とりあえず手元で試した限りでは画面まっくらで何も表示されません。というか同期信号すら出てきてない。という事で王道に従いmameのソース(konamigx.cpp)見つつ修理。まだ未解決だけど、とりあえずログ。コメント歓迎。

最初に疑ったのがソケットに刺さったサウンドプログラム用EEPROM。9cのほうに変な力がかかって斜めによれて全部の足が曲がってた。これならいいなー、と思って直してみたけど世の中そんなに甘くなかった。あとソケットのROMは念の為読んでみて既知のCRC/SHA1と一致する事は確認した。

次に疑ったのがカスタムのセキュリティチップ。これが死んでたら or 壊したら、もう直せないやつ(笑)。いっきにハードになった。
写真左上のピン5本くらいが、若干錆びて相互に接触してる雰囲気を醸し出してるんですよね。この子はDMAでスプライトの並び替えとかまでやらかすので、足がショートしてたらキャラ化けとか確かにありそう。という事で、ループで眺めながらピンセットで足元の掃除。最後に最近使い始めたヒートガン的なもので軽くハンダを溶かして再固定。テスターで周辺のピンとの接続、隣接ピンがショートしてない事を確認。

……でも変化なし……

で、とりあえずプログラムROMの足をロジアナで調べて、どこで止まってるか見てみようと思ったら……アドレス線が0に張り付いたまま動かない。どうもメインCPUが起きてきてない模様。サブボードからそんな事できるんだ……セキュリティチップかサウンドCPUが初期化後にリセット解除するのかなぁ……的な想像だけど不明。でも、ダメ元でサウンドプログラムROMを引っこ抜いて起動を試みる。
やった!ちなみに沙羅曼蛇2は画面信号が出てROMチェックが始まるまでに5秒弱かかり、他のサブボードと比べるとかなり遅め。この画面をじっと見つめると、文字コードに0x08がORされてる事がわかる。一行目がROM RAM CHECKなので、RがZ、AがIとか対応はすぐわかるはず。

これが元所有者の言うキャラ化けだとしたら、スプライト(セキュリティチップ)は問題なさそう。おそらくタイルを読み出すアドレス線が上位のほうで浮いてるんだろうと推測して、プルダウン抵抗片手に17h、15h、13cの足を調べてみる。と、17h、15hの3番ピン、13cの4番ピンを落とすとZがRに戻った(文字コードに0xF7でANDとってる事になるので、別の文字が一部化ける事になるけど問題なし)。ピン配列同じはずのROMのうち、13cだけピンが違うのは、おそらく他のが16-bitsでこいつだけ8-bitsで使ってるから。

でこのピンから出てる配線を追って裏面、表面といったりきたりしたら、何もないつきあたりで線が途絶えてた。
下のラダー抵抗の上に(DH)って文字があると思うけど、その「(」と「D」の間の部分。汚れを削ったら下からviaらしき穴が……。なんかラダー抵抗も汚れてるし、この部分になんらかのダメージがあった可能性が高いなー。本来、この行き止まりの配線はvia越しにラダー抵抗に繋がって、その先で(DH)の文字上部裏側にあるコネクタに接続されていた模様。ピン的には「(」のすぐ上の部品面からは配線されていないピンがそれ。
という事で、ひとまずコネクタとEEPROMの足をショートさせてみる。うまくいくようなら、後でハンダ付け配線。
やった!キャラ化けに関しては解決!後半のBADはサウンドのROMを抜いてるせいですね。サウンドROMは刺すとやっぱりメインCPUが起きてこないので、まだ別箇所に似たような問題があると推測。ひとまず疲れたので記録だけとって次号にコンティニュー。