Z80はどう動いているのか見れる装置をarduinoで作ってみた

このかたちのIC が一番好き。

z80といえば、かつて様々なマイコンに搭載されたことで有名なCPUですが、これいまでも秋葉原でふつうに(2017年現在)ラジオデパートで買うことができるんです。ついでにUVEPROM?も売ってるし、mc68000も売っているので、せっかくならと一つ買ってみました。
 今回入手したのは、TOSHIBAのTMPZ84C00AP-6というものです。DIPようなので、ボードの上で簡単に実験することができます。と言っても、今回の目的は
「とにかくCPUってどう動いてるのかを見る」
なので、データバスやアドレスバスがどんな信号を出しているのかを見れるようにするのが目的です。そこで、手動クロックで操作できるようにしたいのですがただボタンをつなげただけではチャタリングというのが発生して1クロックずつ動いてくれないらしいのです。じゃあその信号をarduinoから出したらいいのでは?と考えまして、デジタルピンと5V供給ピン、CLKピン、GNDをつなぎましたが・・・
いざ電源投入

動かない。なんで?データバスにつなげたLEDが反応しない。ひとまずグーグルでピン配列についてもう一度確認すると、どうやらいくつかのピンに電圧をかけてあげないとz80は周辺機器待ちとなって動かないようです。そんなことになってるんだ。すごい。

というわけで、HALTやらWAITやらのピンを入力が必要なものは入力し、出力されるものの先にはLEDをつないであげました。(これ、逆流防止にもなって結構いいかも。)
そんなこんなで出来上がったのがこちら。
LEDがひたすらぴかぴか光ります。

PCとはシリアル通信で、クロックの自動入力モードと、半クロックづつ入力できるモードとを切り替えたり、0011010というメモリだけ入力できるようにした回路と、電源を管理できるようにしております。また、シリアルモニタでM1ピンの動きを監視し、手動ですが任意のタイミングでメモリを入力できます。(1byteのみですが。)

詳しい方に見てもらったら怒られそうなモノになりましたが、いまCPUがなにをしているのか手に取るようにわかるので見ていて飽きません。クロックの速さも自由自在ですし。

ただ、arduin unoではピン数が足りなくてデータバスやメモリバスの管理ができないのが問題ですね。外部メモリ作ってみようかな…

追記:以下に今回のarduinoコードを書いておきます。あとはピンに合わせて配線してもらえれば同じように実験できると思います。




コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミリーベーシックでゲームプログラミング

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜