2021-01-01 23:31 — asano
カテゴリー:
2021年、今年もどうぞ宜しくお願いいたします。
さて昨年末に組み立てたまま動かずに悩んでいたSBCZ8002ですが、動作するようになりましたのでその顛末を書いておきます。
まずはすぐに使える周波数カウンタとテスタで見られるところから見ていきました。
A0はリセット直後は変化ありますがその後は"L"のままです。
A1~A11は次のような周期で変化し続けています。
A1 | 333.8kHz |
A2 | 143.2kHz |
A3 | 95.6kHz |
A4 | 47.9kHz |
A5 | 36.0kHz |
A6 | 24.1kHz |
A7 | 12.2kHz |
A8 | 12.2kHz |
A9 | 12.2kHz |
A10 | 12.2kHz |
A11 | 12.2kHz |
A12以上もリセット直後は変化がありますが、その後は"HHHL"のままになります。
アドレスラッチの74HC574は正常に動作しているらしいこと、0E000H~0EFFFHの範囲でループしているらしいことがわかります。もちろんZ8002も動作しているでしょう。
AS, MREQ, DSはともに667.2kHzなので上記ループはメモリアクセスであることがわかります。
B/Wは"L"、R/Wは"H"なのでワードのリードアクセスですね。
ST[3:0]は"HHLH"に安定するのでループはプログラム・アドレス空間からの命令の第1ワードの読み込みのようです。
ここまでの動作には特におかしな点はありません。やはりZ8002に問題は無さそうです。
続いてGAL16V8の出力を見てみると、リセットしても"H"のまままったく動きません。ROMやRAMのセレクト信号はこのGALが作っているのでROM, RAMなどには一切アクセスできていないことになります。
Z8002はマルチプレクスバスなのでリードアクセスに対してどのデバイスも応答しないと直前にバスに出力されたアドレスをそのまま読み込んでいる可能性が高いです。オペコードの0ExxxHはJR
(相対分岐)命令なので、暴走した挙句にアドレスが0ExxxHの範囲に入ったときに近傍への分岐命令をフェッチし続けて捕まったのではないかと想像しています。
ここまで来ると原因はほぼGALに絞られてきます。
GALは書き込み時にベリファイはされていますが、ROMなどとは異なり通常動作とは異なる方法で読み出しているので、ベリファイは通るけど動作しないという可能性も捨てきれません。
一緒に買ったものや別ロットのGALに交換してみましたが状況に変化はありませんでした。
ここでふと書き込んでいるデータがおかしいのではないかと思い始めました。
念のために提供されているsbcz8002_datapack.zip
を展開し直してみたら...
何事もなかったかのように動作してしまいました。試した複数のGALも新しいデータ書き直したら全部OKです。
新年早々しなくてよい苦労をしてしまったのでした。
コメントを追加