ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.29
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆特注品Z80ボードND80ZHの機能説明
TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。
新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。

[第27回]

●ND80ZHのステップ回路(その2)

Z80版TK80ボード(ND80ZH)のステップ回路は[第25回]にお見せしました。
その回路図をよく見ますと、ROMselect信号だけではなくて、RFSHなどというわけのわからない信号が抱き合わせになってしまっています。
それはまた一体どういうわけなのか、というところで前回は終ってしまいました。

普通に考えると、下のような回路でいいはずなのです。
すっきりしていて前回考えた通りのわかりやすい回路です。

ところがこの回路にすると、まともにステップ動作をしてくれません。
なぜかといいますと、Z80のリフレッシュが邪魔をしてくれるからなのです。

●Z80のリフレッシュ機能

Z80は、ダイナミックRAMのデータ維持に必要なリフレッシュの機能をもっています。
Z80のメモリ空間はたかだか64KBですから、今ならそれくらいのメモリはSRAM(スタティックRAM)の1〜2個で簡単に実現できてしまいます。
しかしZ80が登場した当時は、まだメモリの集積度が低くて、スタティックRAMはとても高価だったのです。
ちなみにTK80は標準ではわずかに512バイトのRAMしか搭載していませんでした。TK80の基板上には1KBのRAMエリアしかありませんでしたから、RAMをフル実装してもやっと1KBだったのです。

そんな昔でもダイナミックRAMはありました。
いまでは普通にRAMといえばパソコンのDRAMのことをさすようになってしまいましたが、そのDRAMというのはダイナミックRAMのことなのです。
もちろん集積度は今とは比べ物になりませんでしたが、当時でもスタティックRAMよりはダイナミックRAMの方が集積度が高かったので、数十KBのメモリシステムということになれば、ダイナミックRAMを使うことになります。
ところがスタテイックRAMと違ってダイナミックRAMは通電状態でも、そのままではデータを維持しておくことができません。非常に微細な構造でデータを維持しているために、ほっておくと、すぐにデータが消滅してしまいます。
そこでデータが消えてしまわないように、数ミリだか数十ミリ秒だかの間隔で、メモリを常時アクセスして「再書込み」してやらなければなりません。それがリフレッシュです。
一般的なダイナミックメモリシステムでは、そのためにリフレッシュ回路を組んで、CPUのメモリアクセスとは別にリフレッシュを行うようにしなければなりませんでしたが、Z80では、そのようなリフレッシュ回路を用意しなくてもよいように、自前でその仕組みをもっていたのです。

下はZilog社「Z80 User’s Manual」からの引用です。

Z80では、CPUがOPコードをフェッチしたあとの、内部処理の期間中に空きになる、T3、T4のクロックのときに、外部アドレスバスにダイナミックRAMのための「リフレッシュアドレス」信号が出力されます。

ところで…?
なんのお話でしたっけ?

そうでした。
Z80ではINTE信号がありませんから、TK80と同じようにステップ動作をさせるために、INTEの代わりに、ROMselect信号を使おうとしたところ、うまく動いてくれません。
理屈の上では、ROMのモニタプログラムからRAMのユーザープログラムにジャンプして、そこで1命令を実行したところでINT信号が出るはずなのですが、実際にはINT信号が出てくれないのです。

ROMselect信号は、MREQとA15=0とのANDから作っています。
ですから、RAMをアクセスしているときは、D−FFのクリア端子はHになって、フリップフロップが働くはずなのですが、どうもRAMをアクセスしているはずなのに、D−FFがクリアされてしまうようなのです。

そこで、リフレッシュに注目、です。
上のタイミングチャートを見ると、RefreshのときもMREQがアクティブになっています。
もしもRAMをアクセスしているときに、A15=0になるようなアドレスが出力されたとするならば、おお、D−FFはクリアされてしまいます。

それではということで、[第25回]にお見せした回路図のように、このリフレッシュ期間中はD−FFをクリアしないようにすると、TK80と同じように正しくステップ動作をしてくれるようになります。
実は、この[第25回]にお見せしたZ80CPUでのステップ回路は、もうかれこれ30年近くも前に作ったND80Zの回路でした。当時はどのような過程でこのリフレッシュ問題にたどりついたのかは全く記憶にありませんし、記録も残っていません。
ただ回路図として残っていることからすると、ともかくZ80CPUを使ってTK80のステップ動作と同じことをさせるためにはこうしなければならない、ということを探り当てたことには違いありません。

ところで、さきほどのタイミングチャートを見ている限りでは、ここまでのお話はしごくもっともな展開で、疑問をさしはさむ余地はないのでありますが…。
さきほどのZ80 User’s Manualからの引用文をよくよく読み直してみますと。
おい、ちょっと、待て。おかしいではないか。
ということになります。

だって、しょっぱなから「the lower seven bits of the address bus contain a memory refresh address …」と書いてあります。
そう。確かにアドレスバスの下位7ビットには、リフレッシュアドレスが出力されるのです。
でも、ではこのときアドレスバスの上位ビットには何が出力されるのでしょうか?
Z80 User’s Manualのリフレッシュ信号の説明や、アドレスバス出力、OPコードフェッチサイクル(M1サイクル)の説明など、あちこち捜してみたのですけれど、そのどこにも、このときアドレスバスの上位ビットがどういう状態になるのかについては、何も書かれていませんでした。

うう。
さて、しかし、どこかで、何かを、読んだような…。

本日は時間がなくなってしまいました。この続きはまた次回にすることにいたします。

[追記]
昨日は眠かったので気がつかなかったのですけれど、今朝(3/20)になってから読み直していましたら、今回お見せした「Z80 User’s Manual」からの引用文にはミスプリントがあることに気がつきました(お気づきになりましたでしょうか?)。
本日も朝から多忙ですので、それについても次回に書くことにいたします。
CPUをつくろう!第459回(2010.3.19upload)を再編集

ワンボードマイコンをつくろう![第27回]
2011.6.29upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る