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が起きてこないので、まだ別箇所に似たような問題があると推測。ひとまず疲れたので記録だけとって次号にコンティニュー。