2019年9月8日日曜日

基板修理:達人

いかにも良くありそうなスプライト化けの基板。


ぱっと見でアトリビュートRAMかその周辺の配線切れなら楽勝かなー、と思えるくらいには慣れてきました。TOAPLAN系の基板では疾風魔法大作戦の調査をしているので、ぱっと見でおおよその流れはわかります。

A4に陣取っているFCU-2がスプライト制御用のカスタムチップなので、こいつを中心に調査します。すぐ近くのA1/C1にあるSRAM 2KBx2がスプライトアトリビュート用のSRAMですね。アドレス共通、データはパラで16-bitsの構成。前のオーナーが修理済でソケット化されてたので片方ずつ抜いて動作確認できたので助かりました。A1が奇数アドレス、C1が偶数アドレス担当かと思われます。データは直接FCU-2に繋がっていました。CPUからの書き込み時や表示スプライトの選定時にFCU-2からアクセスされるようです。とりあえずCPUからは正常読み書きできてるようだし、配線は全部繋がっていたので、こっち側は問題ないと判断。一応SRAM故障時のオブジェ化けパターンを一通り調べてみたけど基板とは一致せず。となると論理かデータが怪しい。

データに関してはB65-01から04のマスクROMからの読み出し。28pinで128KBというEPROMにはないタイプですが、27C512の/GをA16に読み替えれば大丈夫。自分は27C010に変換する下駄を作って読み出してみました。


で、読んでみるとB65-04がなんか既知の物とは若干違う。ただ、読ませて見ても別段問題あるデータではなかったので原因ではない様子。そうそう、ちなみにB65-01-04はアドレス共通、データはパラで32-bitバス。8ピクセルで4プレーンに分かれてるって予想をしてるけど確信もつまでは調べてない。ただ、そういった事情もありデータ故障の可能性は低い。

データは大丈夫そうなのでROMから逆に辿ってアドレスバスを調べていく事にした。下位3-bitsはA13の74LS175に繋がっていたので、おそらくY方向の8ライン分のアドレス生成結果が出てくるのかな。だとすると連続8Bx4プレーンで8x8サイズのスプライトのデータを構成。A[15:3]は14-bitsで指定するオブジェクト番号のはずで。これらはMSBから順にA15/A14/A17/A16の位置にある72LS163のカウンタに繋がってた。C14/C16のSRAM出力をLOAD時に取り込み、クロックでインクリメント。キャリーも順番どおりに上位のENに入っている。SRAMにソート済みスプライト情報が入っていて表示期間には読み出しながらスプライトを合成する感じか。カウンタの制御信号はSRAMより手前のロジックIC郡が作ってる模様。

ここまで論理が絞れてくると、壊れてる可能性があるのは74LS163のうちのどれか。エミュレーションで適当に壊してみると上位ビットが怪しいかなぁ……という事でロジアナで観測。どうもA14の74LS163が出力も弱く、出力論理も不安定。出力AとDがなんとなくHIGHに張り付いている事が多い。

そんなわけでスプライト番号に0x0900を被せてエミュレーションしてみたのがこれ。


静止画だとそこまではっきりわからないかもしれないけど、動いている様子を見るとだいたい化け方は一致したと思って良さそう。

って事で秋葉にて部品調達。たまたま大試遊祭に遊びに行こうと思ってたので丁度良い。というか、順番が逆で、それまでに故障部品を特定しようと思って作業してた。しかし、ツイッターでも書いたけどロジックICもだいぶ入手が難しくなってきた気がします。自分はマルツ、秋月、千石くらいしかお店を知らないですが、どこが品揃え良いってわけでもなく、たまたまそのお店が在庫多く持ってたやつが残って今も売られている感じで。今回の163は千石にしか置いてありませんでした。161だったら他でも見かけたしロジアナで見た感じ/CLEARは積極的に使ってなかったから161でも動くかも。でもまぁ、本来のやつを使うに越したことはない。ちなみに最上段に並んでる163のうちA15のやつだけは4-bits中2-bitsしか使ってなくて、未使用品は浮いてます。なので74LS163じゃないと駄目。CMOS版使うなら5ピンと6ピンをpull-up/pull-downどちらかで処理する必要がありそうでした。参考まで。


そして交換後の基板なんですが……ありゃー、まだ不完全でした。再びエミュレーションで確認したら、bit3が0に張り付いているようです。


そんなわけでA16にあった163も交換。


無事に完治です。

参考までにB65-[01-04]のアドレスバスについて調査中に作った表を残しておきます。


自分用のメモなので意味不明だと思うのでざっくり参考にできる程度に説明しておくと、FUC-2がスプライトのコントローラ。この表にはない近くのSRAMx2と反対側で繋がっていて、それを読みながら各ラインに表示するスプライトを決定してTC5565の方に格納してくれます。一方でTC5565の下にあるロジック郡が画面表示のタイミングに合わせてSRAMから最上段にある74LS163郡に表示スプライト番号を送り出してくれる。あとはスプライトサイズに合わせて適切な桁の加算機にクロック送って8x8ブロック単位でスプライト番号がインクリメントされるような制御もしてくれてる。そんなわけで74LS163はSRAMが裏で使われてる際にスプライト番号を保持する役目と、サイズに合わせて次の番号を計算する2つの役目を持ちます。GP9001とかが載ってる基板だと、おそらくこの計算までの論理がカスタムチップ内部に入ってます。
で、最後にこの出力がマスクROM01-04のアドレスに入り、32-bitsバスで4-bitsパレット番号×8ピクセルのデータを出します。パレットに関しては前の方にも書いた通り、ROM毎に1-bitでプレーン方式のはず。出てきたデータはシフタで1pixel毎に送り出され、パレット展開・他の面との合成ののち、DACからアナログRGB信号として外に、という流れですね。

2019年9月1日日曜日

基板修理:続続・タンブルポップ

前回はPALで作ってると思われる/DTACKに課題を残して終了となったわけですが。

とりあえずTG-1、TG-4あたりの論理を読み解いてみました。TG4はバスタイミング系の信号とメモリの参照クラスFC[2:0]をとって、より細分化されたタイミングを作る組み合わせ回路の詰め合わせでした。一部はTG-1でも入力に使ってる(ので調べた)。

TG-1はまさに/DTACKを作る回路そのもの。A21が立ってないとメモリアクセスだと思って、/AS、/*DS、Rに連動して即時/DTACKをアサートする。A21が立ってるとI/Oへのアクセスだと思って、8番からの入力に連動してWRITEなら次サイクル、READなら2サイクル後に/DTACKをアサートする。プログラムはIOアクセスまで進むのでメモリ側は問題ないんだな。そっちが動かなければプログラムがそもそも動かないから。そうなると8番の入力が怪しい。

で8番からの入力を追ってみたら15AのDFFと繋がってる。Dは/ASを2サイクル遅延させたもの、CLKがChip 56のPin 151に繋がってる。となるとChip 56が応答しないのが問題に思える。Chip 56は全体的に静止状態に見えるため、そもそもクロックが入ってない気がする。Pin 153が他のFFのクロックと繋がってるためクロック入力か出力に思えるんだけど、こっちの信号も動いてない。

ところでこの基板、クロックは21.4772MHz、32.220MHz、28MHzの3系統あるんだけど、32.220MHzはYM2151用、21.4772MHzはメインCPUとOKI、で最後の28MHzはスプライト制御のChip 52に直接入ってるところまでは確認してる。Chip 52には発振回路を通さずに正弦波で直接入れてるので、中で発振させた後、クロック出力でChip 56に供給してる可能性は高いかな。どっかで断線とかなら良いけど、クロック出力が壊れてるとかだと面倒。いや、面倒という意味ではこれら2つのカスタムは128ピンと160ピンのチップなので何をするにも面倒。

TG-1周辺のロジアナ観測結果はこの通り。


予想通り、最初にIOに書き込みに行ったままだんまり。/DTACK生成周りは理解の通りに動いてる様子。となるとChip 56の入力クロック探しか……これは面倒。もし情報をもっている方がいたら提供して頂けると助かります。最悪、入力ピンと分周比さえわかれば外で作って入れても良い気はする。

そうそう、某エミュのCPUクロックはもう直ってる。

追記:まずは28MHzが入ってる97-128ピン面だけでも……と調査してみた。112-126,127がすぐ隣のRAMと8-bits x2で繋がってました。RAMのアドレスはセレクタに繋がってたからいわゆるspriteram、アトリビュートRAMみたいです。MSBのA10がGNDに繋がってたので容量半分潰してる……リッチだな。故障時はVCCに釣り上げれば交換せずに直る可能性ありですね。電源は簡単に調べられるとして、それ以外で調べきれてないのは、98-102, 108-110だけです。111が2分周で14MHzのクロックを出力してました。B16にある7404の3番に入ってるので、とりあえず問題はChip 52の外っぽい気がしてきました。よかった。