レトロな(5) 8080, 8085, Z80を比べる、ハードウエア編

Joseph Halfmoon

前回までCP/Mエミュレータで古のデジタルリサーチ社の遺産である8080アセンブラやデバッガを使用。「今時の若者というか中年も」8080とかZ80のお名前は知っている。でも知らないことも多いことに気付きましたです。当然か。そこで今回は老人が蘊蓄を垂れさせていただきます。お前がそんなこと言うかと怒られそうだけれども。

※「レトロな」投稿順index

先達の方々の偉大なご努力により、ヤマシイところもなくデジタルリサーチ社のCP/Mとそのツールチェーンをエミュレータ上で使用させていただいております。当時のマシンよりずっと速いんでないかい。ファイルの在処は以下に。

Digital Research Binary Files

さて、CP/M‐80は、インテル8080、インテル8085、ザイログZ80とその互換機上で実行可能なOSでした。この3つの8bit CPUの互換性は非常に高く、命令セット的には、

(8080≒8085 ) ≦ Z80

という感じっす。別記事にて命令セットについても述べるつもりです。今回はこの3者のハードウエアについて思うところを勝手に述べさせていただきます。ざっくりしたところを書いてしまうと

    • まだ集積度的には発展途上だった8080(いろいろ外付け部品必要)
    • 8080の延長上にあって使いやすくなったZ80
    • 次の16ビット8086への橋渡し的な立ち位置の8085

です。3者ともオリジナルはNMOS製品ですが、ハードウエアの設計思想は大分異なっています。

先ずは電源

以下の図は3者の電源端子について黄色のマーカを施してみました。PowerPins_8080_8085_Z80

 

左端が8080、真ん中が8085、右端がZ80です。パッと見、直ぐに分かるのが8080にはプラスマイナス5V電源以外に+12V電源まで必要だったことです。この当時8080に使用されたNMOSプロセスは最先端で、まだこなれていたとは言い難かったことに注意しなければなりません。この時代以前はMOSーLSIといえばまだPMOSプロセスが主力だったのです。そこに登場したNMOSプロセスは、NchーMOSトランジスタの速度の速さ(キャリアの移動度がだいたい3倍ということで良いのかしらん)もあり、性能でPMOSを圧倒するのですが、まだじゃじゃ馬状態ではなかったかと。そこで8080の時代には、オンチップで電源に細工しようなどという「冒険」は考えもしなかったのだと思います。結果、外部で3種類の電圧を作って頂戴ね、ということになったんだと思います。

しかし、次の8085およびZ80の世代となると、コストカットの圧力がかかってきたのでしょう。3電源を1電源にできれば大きなコストカットが見込まれます。そこで新世代のNMOSではバックバイアスジェネレータとかテクを使って+5V単一電源で動作させるようになったものと考えます。

しかし、それにしても8085のピン配置は端正。電源、GNDはこの時代の「業界標準」であった右上と左下の対角線位置です。ただし、実はこの配置はマズイ配置ということが少し後になると分かってきます。後の世代になると電源、GND端子はなるべく近くに寄せるのが定石(遠くになるほどインダクタンス成分が効いてくるため。)またパッケージング技術の進展により複数のGND端子が一般化するとバスのような同タイミングで変化する端子群の両側にGNDを置くような端子配置(対ノイズ)も一般化します。この8085の端子配置は「古き良き時代の」お作法に則ったものですな。

一方Z80の方はチップを横切るものの配置が近いので8085よりインダクタンス的には有利かと。でもま、速度も遅いし気持ちか。それにインダクタンス成分のことを考えて配置したわけじゃないだろうし。。。すみません。

続いてクロック

つづいて3者のクロック端子を緑で色付けしてみました。ClkPins_8080_8085_Z80

まず、左端の8080の場合は、PH1、PH2と2端子使ってます。この場合、

2相ノンオーバラップクロック

を外部で作って入力せねばならないのです。「ノンオーバラップ」というのは2つのクロックの「ハイ」期間に重なりがまったくなく、隙間のあるクロックです。8080の内部回路で使っているクロックそのものと言ってよいです。当然「専用」的なクロックジェネレータを外部に設けねばなりません。

当然、コスト的にはいかがなものかとなって、外部回路削減の要求が強かったんんだと思います。そこで長足の進歩を遂げたのが8085です。8085にはX1、X2と2端子ありますが、これは振動子をここにとりつければ自分で発振させてクロックを作るよ、という端子です。現代のマイコン等でも踏襲されている端子構成です。つまり8080では外部回路が必要であった発振回路まで取り込まれてます。コスト削減っと。また、内部クロックが隠蔽されてしまって外部回路で見えないと困るという意見もあったのでしょう。わざわざCLKという名の出力端子まで備えています。なお、X1、X2は必ず振動子を接続しなければならないというわけではなく、X1に単相クロックを与えても動作します。

Z80の場合、発振回路の取り込みまでは至らなかったようです。オシレータは結構アナログだしなあ。とはいえ2相ノンオーバラップクロックを外部で作ってというのはコスト高につながるので、シンプルな単相クロックで動作するように変更されてます。多分、内部じゃ2相ノンオーバラップクロック使ってると思うケド。

8085はハードウエア設計者に対しては非常によく考えてサービスした石で、RESETに対しても入力だけでなく、出力端子まで用意しています。外部からRESETかけたつもりでも本当に内部で受け付けられたのが否かは見えません。RESET_OUT信号が出てくると。安心して使えますからな。

バス

アドレス端子を黄色、データ端子を緑に色付けした図が以下に。BUS_8080_8085_Z80

ここでは8080をそのまま継承したのはZ80で、8085は次のステップに突き抜けてしまっていることが分かります。

8080ではアドレス、データ分離のバスでした。8ビットなのでデータバスは8ビット幅、64Kバイト空間なので16ビットのアドレスバスです。Z80もこの方式です。色付けしていませんが、8080とZ80のバス制御信号名は異なっているようにも見えますが、最終的には似た信号になります。

8080はバスステータスをデコードする外付け回路

を当てにしていた、ということがあります。ここでも8080は外付け回路に頼ってます。8080の回路にくらべるとZ80の制御信号はごく簡単な外付け論理ゲートで作れるようになっておりシンプル、ここでもコストカットね。

一方、ひとり8085は過激な方向に一歩を踏み出してます。データバス8ビットとアドレスバスの下8ビットをマルチプレクスしてしまったのです。そして悪名高い?ALE(アドレス・ラッチ・イネーブル)信号を設けました。アドレスデータの8ビットについては、まずアドレスを出しておいて、ALE信号で外付けのラッチに確保しておいてもらい、次のタイミングでデータバスに切り替えて使うという技です。アドレス、データ分離の8080やZ80に比べるとメンドイし、外部ラッチが必要な分コスト高になるのですが、これには先を読んだ効果があったのです。それは

後継の16ビット機、8086(もちろん8088も)が40ピンDIPに収まる

という利点です。その当時パッケージ技術はまだまだで、現在のような多ピンパッケージなど登場するのは遥か先です。通常の(当然コストが安い)DIPパッケージは40ピンが最大。それ以上となると特殊でお高いものにつきました。この8085で採用したマルチプレクスバスのお陰で、8086は皆さまが使い慣れている40ピンパッケージで16ビット化できたのです。Z8000や68000のパッケージが大きくなってしまった(特に68KのDIPは今だにインパクトが強すぎるパッケージです)のにくらべると差はデカいです。8086そしてそのデータバス8ビット縛り版である8088はボードコスト的にも8ビット並み。これがIBMーPCの8088採用につながった大きな決め手になったと。偉大なアドレス・ラッチ・イネーブル。

そうだZ80についても1端子、RFRH端子をあげとかないとなりますまい。DRAMリフレッシュのための端子デス。当時のDRAMなのでリフレッシュといってもそんなに難しい回路ではないのだけれども、ともかく他のCPUでは外付け回路が必要であったです。それがZ80を採用するとCPU自身がDRAMリフレッシュをかけてくれる。当時は大うけ。Z80の成功の柱の一つ。ただし今じゃそのありがたみは分からないけど。

レトロな(4) シミュレータ上のCP/Mでマクロアセンブラを へ戻る

レトロな(6) 8080, Z80, 8086を比べる、レジスタ編 へ進む