2018年11月25日日曜日

疾風魔法大作戦(修理奮闘中)

出会い

ちょっと悩んだけど、安いジャンクを見かける機会も少ないし、疾風で3作揃うし、という事で修理できる確信はなかったんだけどKVClabさんで疾風魔法大作戦のジャンクを購入。店員さん「お勧めしません」「無茶しやがって」とか、なんで売ってるのそれって感じですが。

とりあえず店頭で画面見せてもらった時の見込みでは故障個所は最低で2つ。1つは画面が水平同期方向(縦モニタ用だから縦方向)に尾を引く現象。もう1つはオブジェ化け。これは線が入るとかじゃなくて、違うオブジェが表示されるタイプ。

(写真は自宅で撮影)

前者は飛翔鮫の経験から後段で面合成してるあたりのラッチが弱ってくると起きる現象ってのは想像できる。古い基板なら間違いなく74シリーズの交換で済むところなんだけど、この時期の基板だとカスタムの中の可能性もあり少し微妙……なんだけど、のすけさんのガレッガ修理の話で、東亜系ライジング基板はJAMMAコネクタ付近に出てる74シリーズでやってる事はわかってた。

後者も過去の経験からすると、オブジェクトチップ読み出しの際のアドレス線が化けて違うオブジェクトが選択されて起きる現象。正しく表示される物も混在している、化けるキャラはBG面、スプライトともに混在している、というあたりからROM読み出し時のアドレスかな?という想像はできた。原因は様々で基板上のショートや断線、ROMの劣化、半田クラック、あとはアドレスを出力する側のトランジスタ故障あたり。最悪カスタムの出口なんだけど、結論から言うと最悪のケースだった(笑)ので、まだ奮闘中、というわけで途中経過報告です。

水平の滲みの修理


特定は凄く簡単でした。まず、のすけさんが記録を残してくれていた通り、JAMMAコネクタ付近に273が並んでいる事。そして御丁寧にもそのうちの1つに鉛筆でバツ印。どうやら前のオーナーが修理挑戦して諦めた類ですね。よくよく見るとカスタムに近いSRAMも交換した後がある。こっちはオブジェクト化けにあたりをつけて交換したけど効果なくて諦めたって感じかな。という事でバツ印の273をロジアナで観測するところからスタート。


こんな感じで「俺たちは雰囲気でフリップフロップをやっている」みたいな感じの適当な出力が出まくり。という事で、こいつを交換したところ滲みは完全に直りました。



オブジェクト化け


さて、難問のこちら。まずは化けた場所の特定から。ROMの足を弱い抵抗でpull-up/downして問題の個所を予想する方法もあるんですが、今回はエミュレータを使用。特定のアドレス線が0/1に張り付いた場合の読み出し結果を再現するようROMを変換するツールを作ってありまして。変換したROMでゲーム起動。基板と同じ化け方が出てこないか調べたところ、A18が0に張り付いている時の化け方だとわかりました。という事でROMのA18を抵抗で吊ってみたところ、確かに化け方に変化が起きました。という事でA18に繋がっている物を調べたところ、マスクROM2枚とカスタムチップだけ。ショートしてるような個所も見当たりませんでした。

時々A18が1側に張り付いて、化け方が反転する事もありました。場面によっては正常に近い状態の画面が出ます。



次の手を考える前にオシロで波形の確認。1V程度の振幅で矩形の信号が出ていました。この時点では出力はまだ出ていて、壊れたマスクROMでGNDに引っ張られている可能性を期待していました。という事で頑張って大きなマスクROM2枚を引き剥がします。この基板ではオブジェクト用のマスクROM2枚とサウンド用のマスクROM1枚が直接半田で固定されてます。


ヒートガンで350度くらいに熱しながら、IC引き抜く工具でROMを強引に取り外します。このサイズになると均等に力も入らないし、基板もかなりしなった状態になるので心臓に悪いです。表面に少し傷がついて配線が露出してしまったのでこの後ショートがない事を確認しつつソルダーレジストを再塗布してます。残った半田は吸い取り線で処理しつつ、やっぱり残る電源ピン。pull-up/downされてるような端子も同じですね。やっぱり経年で合金化が進むのかなぁ……。今回は残った部分は吸い取るのを諦め、0.5mmのハンドドリルで削りだす事にしました。試した限りこれでランドが取れたりすることもなく、無理して温めまくるより時間もかからず、基板へのダメージも少なそうです。

で、この状態で信号線を再確認してみたのですが、やはり振幅1V程度のままでした。この信号が正しい信号ならレベル変換して再利用する手もあったのですが、改めてオシロで確認したところ、となりのA17の変動と一致している事がわかりました。つまりA18は浮いていてA17の信号をノイズとして拾って振動している、と。このレベルでノイズを拾っているとなるとトランジスタ故障というよりはパッケージ内で断線しているのかもですね。念のためカスタムの出口(160番ピン)でも信号をとってみましたが結果はかわらず。途中で断線という希望も絶たれました。

という事で最後の手段はA17の出力論理を推測して外部回路で生成する、と。当初は付近のSRAMから使うオブジェクトのインデックスを拾ってきてるだろうから、その線を覗いて簡単な論理被せれば作れるだろう、くらいに思っていたのですが……波形観測したら、そうもいかないようで。ちょっとここで苦戦してます。

色々とソケット化された魔法基板
これはこれで嬉しい(ただし動作すれば)

現在観測、想像している範囲だとオブジェクト用のROMは、16bitモードを2枚並べて並列32bitで使用。各pixelが4bitなのでオブジェクトの横8pixelを同時に読みだせます。20bitのアドレスの内訳は、最上位bitがBG/スプライト選択、下位3bitでライン指定、間の16bitがオブジェクト指定です。壊れてるA18はオブジェクト指定の最上位bitにあたります。

カスタム付近のSRAMは8kB x 2です。これもアドレス同時指定で16bitで読み出してます。カスタムは6.75MHz動作で、これがpixel clockと一致しているはず。SRAMはCPUからは直接は見えなくて、カスタム経由でアドレス指定、データ読み書きの手順で触ります。ので、実際のフォーマットはCPUから見えている形式と違う可能性もあり、エミュレータのソース通りとも限りません。そもそもSRAMとオブジェクトROMの読み出しがpixel clockなんですね。オブジェクトROMが8 pixel分同時に読み出せる事を考えてもpixelあたり8サイクルしかない。BG3面とスプライトがあり、BGのアトリビュートを読むのに2サイクル、スプライトで1枚あたり4サイクルって考えると、あれ?足りない……。となるとBGは16x16かな?さらにスプライトは256枚中どれを表示用に読み出すか事前に選定する必要がありますが、HBLANK期間は推定112サイクルしかないので256枚分処理するのは無理。って事で、色々と工夫されてそう。16kBを外に置くくらいなのでカスタムの中のメモリはラインバッファを構成する最低限になってそうだし。

という事で、この辺は自分でコード書いて基板で走らせながら調査を進めるしかなさそう。まぁ、この基板で自分で書いたコード動かすってだけでも楽しいかな。

ちなみにBGやスプライトの原理についてはお気楽古典電子工作のZ80 ゲーム機を作ろう(その6)(その7)に説明があったり、世の中には古いアーケード基板の回路図が出回っていたり、と。参考になる資料は多いのでありがたいです。実際組んだことはないけど、原理は理解できてるつもり。フレームバッファの時代になるまで、基本的な考え方は変わらずに進化してるので、今回もなんとか解析できないかなぁ……と。まぁ、すでに値段分は楽しんだ気になってるわけですが……。あ、学生実験でBG1面+マウスポインタ用スプライト1枚って論理は組んだ事ありました。

0 件のコメント: