麻雀配列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用コインが効いてるようです。ロン4P-9スタート4P-10もし、麻雀コネクタに変換したいなら、以下のように対応させれば動作するはず。T自分はこんな感じで変換コネクタ作りました。入力だけ麻雀コネクタからとって、電源やら画面、コイン入力はJAMMAから。麻雀コネクタの詳細はアーケードハーネス配線データベースさんの麻雀の項に詳しい情報がありますので、知らなかった人はそちらも参照の事。RGBで赤が出ないっていう基板。TR2が取れてなくなってる。秋月でも扱ってるNPNの定番汎用トランジスタだったのでサクッとハンダ付けして修理完了。写真もハンダも下手だけど完成図、そして記念撮影。今度は1200円のF2大マザー。起動しないってやつの修理に挑戦。(そう言えばTAITOロゴのAとASAHIネットのロゴ、少し似てる。僕にとってはどちらもUTMC繋がりなんだけど、何か関係あるのかな......zakさんなら知ってそう)まずは目視で診断。このカスタムの160ピン側の角が3本ほど潰れてショートしてました。QFPには良くあるやつ。足を揃え直してハンダで補強。他にも潰れっぽいのがあったけどテスターで見る限りきちんと絶縁されてるようだったのでそのまま。ここでひとまず電源を入れてみる......と5秒くらいで画面信号が出てくるんだけど真っ暗。仕方ないので68000のバスをロジアナで眺めてみると、普通に初期化はパスしてゲーム起動までいっているような雰囲気。実はうちの環境、-5Vの電源はあるのにJAMMAハーネスには出してなかった。必要な基板今までなかったし。F2大マザーは-5Vがないと音が出ない子。いう事で-5Vも配線して起動してみたら......音楽は普通になってた。コイン投入〜ゲームスタートできているので画面の問題っぽい。サブボードも酔った時に間違って買ったまま未確認だったやつだし、F2は画面周りの最終段の回路がサブ側にあるしで、どっちが悪いのかイマイチ判断できぬー。2018って事で、少しやる気を無くしたんだけど、F2は同期が少し特殊で環境によっては画面がぶれる〜みたいな情報があったので、普段使ってるCGA→S端子ではなく、もう1つのCGA→VGAの変換基板で試してみると......ふむふむ......出てるじゃないか......画面化けてるけど!そこまで難しい症状じゃないのでしばらく調べてみる事に。ロジックICは少なく、FFを中心に故障がないかざっとチェック。次にSRAMの塊を疑うことに。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とかは常に吸い取れなくて。基板の内側に配線層があって接続されてる場合なのか、それとも電流多く流れると合金化が進むのか......。良い方法知っている人いれば教えてください。ヒートガンで温めて針形の工具で貫通させて吸い取ったりとかはそこそこうまくいってる。(もうちっとだけ続くんじゃ)遊幻さん@ヤフオクにてジャンクの飛翔鮫(伏せ字IDバレちゃう......)を入手。簡単に治せると踏んでたんですが......ちょっと手こずってる。気力が続かないし、次に時間できるまで少し間が空きそうなので、軽くメモを残しておこうかと。元の状態はオークションの写真の通り。BG面は正しく描画されてるっぽいけど、スプライト面がゴミまみれ。いうかハード性能以上の枚数スプライト出てる(笑)で、基板を見ると......ガッツリ修理跡。ハンダ面めちゃくちゃ汚い。SRAMは2面対になっているうちの1面がソケット化されてて、しかも刺さってるやつオリジナルは120nsなのに200nsの遅いやつ。これは勝ったか!と思って120nsのやつに差し替えてみたけど世の中そんなに甘くない。症状かわりませんでした、残念。そのくらいは遊幻さんでも試してそう。ちなみに後に調べた感じだとこのSRAMx2はオブジェクトRAMっぽいですぞ。スプライトのパタン番号や座標なんかが出てきてる。この頃、nosuke様の俺基板(いた)本がBEEPに再入荷してたので、先人の知恵として有り難く購入。言えばnosuke様による先人の知恵の結晶、まさかの再入荷になってたので有り難く購入させて頂きました。僕も10年前から基板を集めてたい人生だった。2018ロジックICも壊れるんだ、つらそー......とか他人事のように思いたかったんだけど、SRAM以外にもロジックIC何個か交換されてて。前のオーナーが怪しいと思って修理した箇所か、壊した箇所のいずれかだろうと。自分も先人に習って周辺のロジックを疑ってみる事にしました。今日の板活:飛翔鮫でスプライト化けてたの7404の故障?このノイズ付き逆相クロックでカウンタを回してPROM20のアドレスを倍速で引っ掻き回してた。2018まじかよーって感じでインバータが壊れてた。なんかこういう故障モードは学生実験でトランジスタ描いてSPICE回してた頃に見たことあるような気がするけど、波形が鈍ってたり電源足りなかったりとか、あとゲート壊れかけてたり?そっちはあまり得意じゃなかったから自信ないけど。状態ではあるものの表示されるようにはなった......がやはり他にも問題が。スプライト面のvalid信号が立ちっぱなしな感じ。2018って事で、スプライトは表示されるんだけど、何もないはずの後方位置に同じスプライトデータが何度もリピートされる感じ。PROMの入出力は今回の修理で直ったぽい。期待してる値が読めてるし、後段のFFでposedgeで信号拾えてた。2018とまぁ、そんな感じで少しだけ前進。ちなみにPROMはアドレスに回り続けるカウンタの値をもらってデータを読み出し、それがデコーダに入って負論理のワンホット信号が出てく感じ。シーケンサのタイミング生成的に使われてる。ここでPROMの後段、タイミング信号を受け取ってるdemuxの先を追いかければ面合成部分の論理にたどり着くかなーって思ったんだけど。demuxの信号調べてるうちにクロック波形が崩れてるんじゃないかって気がしてきて。先のNOTの故障もクロック鈍ってた影響で特性悪い個体がノイズ出してただけって可能性もある。いう事でクロックツリーをテスターで追いかけてみたら、すぐに壊れたFFを見つけることができました。CLKと出力1bitが内部でショートしてる模様。実際に波形とってみたら出力がCLKに引きずられてた。そんなわけで該当ICも交換。問題のFFのクロックの足を外したらクロック安定してスプライトが全て消えた。この子がスプライトのvalidをラッチしてた子。2018IC取り外すの大変なので、事前に短時間で検証できる事はやっておき、ある程度の確信が持てたら交換。直ったけど、期待してた敵キャラの縦縞は消えなかった。一箇所壊れてるのか......IC外すの辛い。2018という事で、これだけでは全ては直らず。似たような故障がもう1箇所ある......。キャラが常に化けるというよりは、スプライトが何かの影に入っている時だけ縦縞が入る感じです。自機も出撃時に建物の影で縞々になる。縦縞なので同じピクセルクロックで動いてる素子だと思うんだけど......。ロジック追って少し満足してしまいモチベーションがぐっと下がったのでしばし休憩。今まで論理回路はチップの中ばかりみてきたので基板上の回路を追うのはちょっと新鮮だった。ほんと学生実験以来な感じ。チップと比べると規模は桁違いに小さいけど、物理的な配線を追うのはちょっと手間。見えてないとこテスターで総当たりしないとだし。当時のシステム、わりと愚直にロジックIC積み上げただけなんだなーって。当たり前の事なんだろうけど感心。バスがそれぞれ独立してるのとかも汎用PCになれちゃってると不思議な感じ。画像データとかROM使ってると確かにCPUから読み書きする必要はないもんね。興味持ってる人がいるようだったので、とりあえず手元でデータ生成に使ってるツール一式をまとめてみました。言っても、データ生成はほぼほぼarm用のアセンブリでやってます。endianが指定できればなんでも良いのです。ツール一式は前エントリのサンプルデータと共にGitHubにて。以下にサンプルデータとデータ生成スクリプトが入ってます。スクリプトはPOSIX環境向けなのでWindowsの人はWSLなりCygwin、MinGWあたりを使って道具を揃えてもらえれば、と。言ってもpureなWindows環境向けに同等のツールを揃えることは、ある程度の知識があれば大きな手間はかからないと思います。生成に使っている開発ツールですが、自分はmac上のbrewでarm-none-eabi-gccを使ってます。Ubuntuでもパッケージでさくっと入れられるかと思いますので、Windowsの人はWSLを使っていれば同様に簡単に環境が揃うかと。サンプルデータなので中を覗いてみてください。gxsnd.hっていうヘッダの中で色々とコマンドを定義して、それを使ってアセンブリ言語向けのデータを埋めてく感じです。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でリズム音源モードというか。ノート毎に違うサンプリングデータがアサインされてるモードになります。みたいな順で並んでます。そうそう、通常の音色もサンプリング番号+ADSRチックなエンベロープ個別指定になってます。よって沙羅曼蛇2をベースにする限り、沙羅曼蛇2のROMに入ってるサンプリング音色しか使えません。65音色くらいあったと思います。一応音色一覧的なのもあるけど主観で命名してるので環境手に入れたら自分の耳で確認してもらうほうが確か。各コマンドの値に指定できる値は基本的には0-255の8-bitsの値になります。コマンドによって成約もあります。PANは1が左、8が中央、16が右でその間の値もとれます。REVERBは2つの引数ともに0-15までしか取れません。charで-128から127で考えて良いかと思います。REPEAT_ENDで囲んで下さい。REPEAT_ENDの第1引数が繰り返し回数です。第2、第3については不明ですが、既知のデータでは0が指定されていました。ループポイントについてはLOOPコマンドに続けて戻りたい場所のシンボル名を後続の.dc.lラインで指定して下さい。内部的な挙動はマクロ呼出しと同じですが、コマンドは別途アサインされていました。マクロについてはサンプルでは使っていませんが、CALLコマンドに続けて.dc.lでシンボルを指定すると、任意シンボル内のデータを演奏してから呼び出し元に再生位置が戻ります。これらのデータはDATA_ENDより手前、通常はCH_16の後ろに置かれ、他のデータ同様にENDで終了します。再生環境についてはmameを流用するのが簡単です。言っても沙羅曼蛇2のROMを所有している必要がありますので、この点に関しては著作権遵守でお願いします。駿河屋で2万ちょっとが店頭での最安値かな?ヤフオクで見張ればもっと安く手に入ることもありますが、慣れてない人にはおすすめできません。基板環境ない人でもプラス数万払えば実機で演奏する環境も夢ではありませんよ。パッチをあててmameをbuildする必要があります。debugモードで起動すれば本体に手を入れずともデバッガコマンドから再生する事は可能なのですが......実際にデータ作って〜となると面倒でやってられません。このパッチは特定アドレスにデータを読み込むフックをかけてます。実際には0x00800000を叩くとgxsnd.datというファイル名をメモリに読み、サウンドチェック用の曲ヘッダが指す先を読み込んだメモリ上のデータに差し替え、再生用のホストコマンドを入れて割り込みをあげます。該当アドレスを叩くのはmame/cheat/salmndr2.xmlのcheatを通して行います。BGMなどが追加されます。GXSNDを選ぶと該当アドレスが叩かれてデータの再生が始まるはずです。前者は曲を選んで再生できます。後者は1週目から2週目BGMを再生するハック。何か質問があればTwitterなどで質問して頂ければ。あと、著作者からの要望があれば、前置きなく解析情報を削除することもあるかと思います。68アセンブリ読めれば誰でも数時間でわかるような内容ではありますが。Againに使われているコマンドは0xd0以外は解析できてます。引数の数はコード見ればすぐにわかるんだけど、効果はROM書き換えながら耳で確かめたり、コード見たりでまちまち。0xd0に関しては聴覚上に違いがなかったような気もするけど、mameで確認してる関係上、きちんとエミュレートされてない部分で変化してる可能性も。他の曲でまだ未確認なコマンドだとフルタイムポルタメントとかもありそう。ROM内のサウンドデータを同ツールでbuild可能なソースに変換する解析ツールも作ってあるんだけど、コード適当だし、解析ツールについて権利者がどう思うかもわからないので、今の所公開は考えてません。沙羅曼蛇2のサウンドドライバを攻略するの巻とりあえず、ROMの指定アドレスからサウンドデータをデコードして、アセンブラから再びドライバが認識するデータに再コンパイルする環境を整えた。実機でROM焼きながら曲作るわけにもいかないので、開発用環境としてmameをほげって、特定のアドレスを叩くとファイルからデータを読んでサウンド側のRAMに配置するような環境を用意した。実際にはcheat機能も使って、cheatメニューからLOADを選ぶと該当アドレスが叩かれ、続けてK056800経由でサウンド再生の命令が飛ぶようになってる。現状で把握してるサウンドドライバ用の命令は以下の通り。ノート(音長指定あり/なし、ゲート指定あり/なし、音量指定あり)タイ休符ドラムモード(ON/OFF)繰り返し制御マクロ呼出しパン指定オートパン(指定した時間で2点間を移動)音色指定テンポ指定(チャンネルごと)アタックレート指定ディケイ指定リリースレート指定デチューン指定LFOLFOオートメーション(深さの時間変化)リバーブ(チャンネルごと)ループ指定ヘッダ情報とかマクロやループポイントは絶対アドレスで指定するので、ROM配置に合わせてデータをコンパイルしてやる必要がある。このあたり、開発環境がかなり原始的だった可能性あるなぁ......。MSX時代だとほぼほぼバイナリエディタみたいなので作曲してるっていう話もあったけど、それとMMLの中間くらい?自分はとりあえずアセンブリのマクロを使って読みやすくした状態でアセンブラかけてデータを作ってるけど。ノート毎に音量指定するのが結構面倒で、あとから音量変えるのも手間。MMLから専用コンパイラでアセンブラのソースに変換してた可能性が高いかな?とりあえず簡単な曲を作って再生させてみた。実験の延長なので曲自体凝ったことはできてないけど。音色からなんとなく沙羅曼蛇2感みたいなのは伝わってくるかな。GXの実機でいきたいなぁ。