シンプルZ80マイコン(2)
2025.09.11
コンピュータとは、すなわち配線なり。
とにかく配線が大変だと思えば良いです。
トランジスタ百万個とか数千万個を集積・・・と聞きますが、実際にはトランジスタ等の素子同士をつなぐ配線のほうが多くの面積を占めていると思います。
昔、通っていた学校には汎用機(メインフレーム)があり、後ろの穴からのぞきこむと、ラッピング線がたくさん接続されていました。CPUを構成する基板が何枚もささっていて、これらをお互いに接続する為のバックプレーンの配線です。
4ビット、8ビット、16ビット、32ビット、64ビット、ということは、それだけ配線の数が増えるということです。
64ビットを手配線することを想像すれば、データ8本、アドレス16本のZ80なんか楽だと思うことにしましょう。(今後も時々思い出しながら配線すると、難行苦行も難なくこなせるかも)
さて、本に載っていた簡単マイコン回路の課題を書きます。
あの頃は何も知らず、書いてある通りに作るしかありませんでした。
就職してから上司に聞いてみると、わけのわからない事を言われて頭がパンクしました。
そのレベルに追いつくまでずいぶん時間を要しましたが、いまでは下記のように説明できます。
この回路の課題
■リセット回路
(1)立ち上がりが遅い場合、/RESETがバタついてZ80が不安定になる事がある。
シュミットトリガ74LS14等を通して入力する事。
(2)この回路では瞬間的な電圧低下に対してリセットがかからない場合がある。
放電用としてDがついているけれど短時間にON/OFFされると放電しきれずリセットがかからない場合がある。
実験的には構わないが、リセットIC(電圧検出)を付けること。
(3)リセットスイッチSW1で電解コンデンサをショートしているので、瞬間的に大電流が流れ、接点を傷める。
SW1と直列に数十Ωを接続すること。
■制御信号/MREQ、/WR
ダイオードを通している為、その順方向電圧によりLレベルが持ち上がるのでノイズマージンが低下する。
Lレベルが持ち上がりすぎると正常に動作しないことがある。
もしどうしてもダイオードを使うならショットキーダイオードを使用することが望ましい。
当時は最初ダイオードで試してなぜかうまくいかず(ほかの原因もあったでしょうけれど)、結局はICをいくつか使った回路にしてようやく動きました。
■DMA
BUSREQとBUSACKを使うやり方が多いと思うけど、単純にZ80にリセットをかけ続ける(Lレベル継続)とバスが開放されるので、アドレス・データスイッチからDMAが可能となる。
これでRAMに直接プログラムを書いたり読んだりする。
BUSREQでバスを開放させた場合と、RESETをかけ続けてバスを開放させた場合での違いについて、データシートの記述を良く確認して比較してみる。
MREQ, RD, WRの信号がハイインピーダンスになるか、Hレベルになるか、そういった違いもあったような気がする。(年数経過で忘れた。要確認)
■クロック
そのマイコンが対応できる最大の周波数にしたくなるのが人の性
それ以上にしてみたくなる人の性
さらに、どこまでいけるか試してみたくなるのも人の性
実験で動かしてみるだけなら遅いクロックで十分。
それでも人間より速い。
かえって遅くしたほうが、目で動きが追えるので面白い。
注意:NMOS版Z80では最低動作周波数がある。内部がダイナミック回路になっているため。
CMOS版では手動クロックでも動作可能。
押しボタンの信号をチャタリング処理して、クロックとして与える。
1クロックずつの動作を追ってみるのも勉強になる。
NMOS版ではクロックの入力条件が本来は厳しい。
おそらく内部でクロックをたくさん分配しているから負荷が重たいのだろうけど、いろんな製作例を見ても、厳密にはほとんど条件を満足していないようです。
それでもとりあえず動いています。
■DMA部
スイッチ側のアドレス・データにはバッファを入れる。/RESET=Lの時だけバッファをイネーブルする。
■そのほか
バスにプルアップ抵抗を入れるべきかどうか。入れておくと良い。
参考値10KΩで、コモンタイプの抵抗アレイ8素子入が使いやすい。
バスの使用条件でハイインピーダンスになる場合があるなら入れるべき。/RESET=Lの時とか、BUSREQ=Lの時とか。
とにかく配線が大変だと思えば良いです。
トランジスタ百万個とか数千万個を集積・・・と聞きますが、実際にはトランジスタ等の素子同士をつなぐ配線のほうが多くの面積を占めていると思います。
昔、通っていた学校には汎用機(メインフレーム)があり、後ろの穴からのぞきこむと、ラッピング線がたくさん接続されていました。CPUを構成する基板が何枚もささっていて、これらをお互いに接続する為のバックプレーンの配線です。
4ビット、8ビット、16ビット、32ビット、64ビット、ということは、それだけ配線の数が増えるということです。
64ビットを手配線することを想像すれば、データ8本、アドレス16本のZ80なんか楽だと思うことにしましょう。(今後も時々思い出しながら配線すると、難行苦行も難なくこなせるかも)
さて、本に載っていた簡単マイコン回路の課題を書きます。
あの頃は何も知らず、書いてある通りに作るしかありませんでした。
就職してから上司に聞いてみると、わけのわからない事を言われて頭がパンクしました。
そのレベルに追いつくまでずいぶん時間を要しましたが、いまでは下記のように説明できます。
この回路の課題
■リセット回路
(1)立ち上がりが遅い場合、/RESETがバタついてZ80が不安定になる事がある。
シュミットトリガ74LS14等を通して入力する事。
(2)この回路では瞬間的な電圧低下に対してリセットがかからない場合がある。
放電用としてDがついているけれど短時間にON/OFFされると放電しきれずリセットがかからない場合がある。
実験的には構わないが、リセットIC(電圧検出)を付けること。
(3)リセットスイッチSW1で電解コンデンサをショートしているので、瞬間的に大電流が流れ、接点を傷める。
SW1と直列に数十Ωを接続すること。
■制御信号/MREQ、/WR
ダイオードを通している為、その順方向電圧によりLレベルが持ち上がるのでノイズマージンが低下する。
Lレベルが持ち上がりすぎると正常に動作しないことがある。
もしどうしてもダイオードを使うならショットキーダイオードを使用することが望ましい。
当時は最初ダイオードで試してなぜかうまくいかず(ほかの原因もあったでしょうけれど)、結局はICをいくつか使った回路にしてようやく動きました。
■DMA
BUSREQとBUSACKを使うやり方が多いと思うけど、単純にZ80にリセットをかけ続ける(Lレベル継続)とバスが開放されるので、アドレス・データスイッチからDMAが可能となる。
これでRAMに直接プログラムを書いたり読んだりする。
BUSREQでバスを開放させた場合と、RESETをかけ続けてバスを開放させた場合での違いについて、データシートの記述を良く確認して比較してみる。
MREQ, RD, WRの信号がハイインピーダンスになるか、Hレベルになるか、そういった違いもあったような気がする。(年数経過で忘れた。要確認)
■クロック
そのマイコンが対応できる最大の周波数にしたくなるのが人の性
それ以上にしてみたくなる人の性
さらに、どこまでいけるか試してみたくなるのも人の性
実験で動かしてみるだけなら遅いクロックで十分。
それでも人間より速い。
かえって遅くしたほうが、目で動きが追えるので面白い。
注意:NMOS版Z80では最低動作周波数がある。内部がダイナミック回路になっているため。
CMOS版では手動クロックでも動作可能。
押しボタンの信号をチャタリング処理して、クロックとして与える。
1クロックずつの動作を追ってみるのも勉強になる。
NMOS版ではクロックの入力条件が本来は厳しい。
おそらく内部でクロックをたくさん分配しているから負荷が重たいのだろうけど、いろんな製作例を見ても、厳密にはほとんど条件を満足していないようです。
それでもとりあえず動いています。
■DMA部
スイッチ側のアドレス・データにはバッファを入れる。/RESET=Lの時だけバッファをイネーブルする。
■そのほか
バスにプルアップ抵抗を入れるべきかどうか。入れておくと良い。
参考値10KΩで、コモンタイプの抵抗アレイ8素子入が使いやすい。
バスの使用条件でハイインピーダンスになる場合があるなら入れるべき。/RESET=Lの時とか、BUSREQ=Lの時とか。
シンプルZ80マイコン(1)
2025.09.11
学生の頃に買って読んでいた本「マイコン回路の手ほどき」白土義男著、日本放送出版協会
そのP.73に載っている回路図、というよりもブロック図

このシンプルさに惹かれたのでした、当時の自分は。
簡単に作れそうだ、作ってみようと。
すでに高2の時にワンボードマイコンを作っていたから、まあ、この時代でマイコン作りなんて時代遅れとか誰もやってないとか色々言われたもんだが、勉強して自分の財産になった。
だが、簡単そうに見えてじつは「深い」世界への入口だなんて全く想像もできなかったわけ。
このブロック図を元に、具体的な回路図を描き、部品を買ってきてユニバーサル基板に1本ずつ配線し始めた。
この学生時代に下宿していた市には、あの子どもの頃からあこがれたパーツ屋さんが有り、いつでもパーツを買いに行けたのだ!
しかし、意外にも高くついたので一部妥協するしかなかった。いまでも覚えている。レジで自分の持っているお金を上回る金額だとわかり、あせって、いくつか買わずに返してきた。
図には具体的に描いてないけど、プログラムを書き込んだり読んだりするのにはトグルスイッチとLEDが必要になる。
データ用8bit(8個)、アドレスは・・・いきなりそんな大きいプログラムを入力するだろうか?トグルスイッチでは面倒だろうと予想した。とりあえず8bit(8個)に、しかし単価をかけると高すぎるなあ。
代わりに何かないかと探したら、ロータリー式DIPスイッチがあった。0~Fまで16進数が入力できるやつ。これだ。これを4個使えばアドレスとデータが入力できる。これを買おう。
いずれにしてもアドレス8bitでは256バイト以内でプログラムとデータ、それにスタック領域をおさめなければならない。
まあなんとかなるだろうと、楽観的だったと思う。
結局、シンプルで楽々できるだろうと思ったら予想以上に悪戦苦闘、まだ当時は未熟だったし、配線はもりそばにスパゲティトッピングになってしまった。
あれこれやって試して手直ししたり、回路を見直したりと現在では覚えていないが、最終的には動くようになった。そこまでの道のりが長かった。
あのダイオードが曲者で、ICを使わなくて済むなあ、と思ったら厄介な問題が潜んでいた。一体、何が? (つづく)
そのP.73に載っている回路図、というよりもブロック図

このシンプルさに惹かれたのでした、当時の自分は。
簡単に作れそうだ、作ってみようと。
すでに高2の時にワンボードマイコンを作っていたから、まあ、この時代でマイコン作りなんて時代遅れとか誰もやってないとか色々言われたもんだが、勉強して自分の財産になった。
だが、簡単そうに見えてじつは「深い」世界への入口だなんて全く想像もできなかったわけ。
このブロック図を元に、具体的な回路図を描き、部品を買ってきてユニバーサル基板に1本ずつ配線し始めた。
この学生時代に下宿していた市には、あの子どもの頃からあこがれたパーツ屋さんが有り、いつでもパーツを買いに行けたのだ!
しかし、意外にも高くついたので一部妥協するしかなかった。いまでも覚えている。レジで自分の持っているお金を上回る金額だとわかり、あせって、いくつか買わずに返してきた。
図には具体的に描いてないけど、プログラムを書き込んだり読んだりするのにはトグルスイッチとLEDが必要になる。
データ用8bit(8個)、アドレスは・・・いきなりそんな大きいプログラムを入力するだろうか?トグルスイッチでは面倒だろうと予想した。とりあえず8bit(8個)に、しかし単価をかけると高すぎるなあ。
代わりに何かないかと探したら、ロータリー式DIPスイッチがあった。0~Fまで16進数が入力できるやつ。これだ。これを4個使えばアドレスとデータが入力できる。これを買おう。
いずれにしてもアドレス8bitでは256バイト以内でプログラムとデータ、それにスタック領域をおさめなければならない。
まあなんとかなるだろうと、楽観的だったと思う。
結局、シンプルで楽々できるだろうと思ったら予想以上に悪戦苦闘、まだ当時は未熟だったし、配線はもりそばにスパゲティトッピングになってしまった。
あれこれやって試して手直ししたり、回路を見直したりと現在では覚えていないが、最終的には動くようになった。そこまでの道のりが長かった。
あのダイオードが曲者で、ICを使わなくて済むなあ、と思ったら厄介な問題が潜んでいた。一体、何が? (つづく)