Z80
概要
嶋正利らインテルを退社したIntel 8080の開発スタッフが設計を行っており、8080とはバイナリレベルでほぼ上位互換性がある（100%ではない）。
ザイログオリジナルの製品としてクロック周波数が2.5MHzのZ80から20MHzの派生製品まで、各社からセカンドソースや互換製品が製造されている。2007年現在は実チップではなく、FPGAやASIC用のIPコアとして活用されている。パチンコの主基板向けプロセッサーに使われているNECのμPD70008 IPをはじめ、商用の互換コアは20社以上存在し、オープンソースのIPコアも5種類以上存在している。
Z80とその互換CPUは、当初はより高速な8080互換CPUとして応用され、S-100バス互換機にもこぞって搭載されるなど、黎明期のパーソナルコンピューター市場を支配した。日本国内においても、1970年代の末から80年代前半頃にかけて、ビジネス用のオフィスコンピュータなどの他、各社のホビーパソコンにも搭載された。
また組み込み用としては21世紀に至るまで応用され続けて来ており、多数の機器に搭載されたほか、初期のゲーム専用機などにも搭載されていた。パチンコ・パチスロの抽選を司る主基板部分のコアCPUには暗号機能を付与したZ80ベースのカスタムLSIが使われており、消費量の多い分野の一つである。このLSIはCPUとメモリの間で交換するデータを暗号化し、プローブを当ててもプログラムやデータが読み取れない様にしている。
8080が、それと組み合わせられる8251 (USART)、8253 (CTC / PIT)、8255（PPI）でファミリーを構成していたのに対応して、Z80SIO、Z80CTC、Z80PIOや、Z80DMAでZ-80ファミリーを構成する。また、これらを組み合わせたマイコンがある。
開発者の間では、しばしば「ゼッぱち」と略して呼ばれることが多い。しかし、同社にはZ8というマイクロコントローラーもあるため、混乱の原因になることもある。
ハードウェア
Z80は、インテルの 8080マイクロプロセッサの改良型といえる製品であり、他のインテル系CPUと同じくリトルエンディアンである。8080に対して、若干の拡張、電源の 5V単一化、より高いクロック周波数への対応などが図られた。メモリ空間は16ビット幅のアドレスバスで示される64KBで、それ以上のメモリ空間を操作する場合には、MMUなどを追加しバンク切り替えなどを行う必要がある。
最大クロック周波数は、Z80が2.5MHz版、Z80Aが4MHz版、Z80Bが6MHz版、Z80EもしくはZ80Hが8MHz版、など、末尾のアルファベットの有無と種類で識別できる。トランジスター数は8,200個。CMOS版ではZ84C0006が6.17MHz、Z84C0008が8MHz、Z84C0010が10MHz、Z84C0020が20MHz動作となっている。
8080から拡張されているものは、DRAMの情報を維持（リフレッシュ）する機能の内蔵とそのためのレジスタの追加、8080では1組だった汎用レジスター群を、切り替えて使用できる表と裏の2組とし、また、IXとIYの2つのインデックスレジスタを使用したメモリ操作を含む命令の増強、割り込みモードの追加、ワイヤードロジックによる命令の実行、相対アドレスによるジャンプ命令などが行われている。乗算・除算命令は8080同様に存在しない。
また、本来16ビット固定のインデックスレジスタを8ビット単位に分割して使用できるなど、ロジックの設計上で派生したとおぼしき、命令表には存在しない隠し命令が存在した。これらの一部はZ280のマニュアル中で正式にドキュメント化されている。
製造には、この頃使われ始めたイオン打ち込み技術が使用された。当時、ライセンスを取ってセカンドソースとして製造する、あるいはクリーンルーム設計による独立実装ではなく、顕微鏡写真を利用したデッドコピーを行う一部の日本企業があったため、イオン打ち込み技術はその対策のためにも使われた。イオン打ち込みにより、エンハンスメント（ノーマリーオフ）に見えるが実はディプリーション（ノーマリーオン）というトランジスタを6個ほど仕組み、素直にデッドコピーしたのでは正しく動作しなくなるようにして時間稼ぎをした。
特徴
8080との差別化のため、命令の1サイクル目（M1サイクル）では他のサイクルに比べて所要ステート数が少なくなっている。通常のサイクルが3ステート必要なのに対しM1サイクルでは2ステートである。仕様を見るとM1サイクルには4ステート必要なように見えるが、後半の2ステートはリフレッシュ機能のために使用され、通常のメモリアクセスとは関係がない。
これは同じ命令を実行しても8080よりも高速に実行するためのZ80の売りの一つだった。反面、このM1サイクルだけのために速いメモリが必要になり、ハードウェア設計者からは不評を買っていた。
Z80には「特定の命令の組み合わせを用いると、普通に命令を書いた場合よりも実行にかかるクロック数や命令の総バイト数を少なくできる」というテクニックが多数存在し、これらは「最適化」「クロック削り」などと呼ばれた。例えば、Z80にて追加されたブロック転送命令やインデックスレジスタ命令は、一連の処理に必要なプログラムコードのバイト数を節約できる反面、他の命令で代用する場合よりも所要クロック数が増大するといったデメリットもあり、命令のメモリ空間上の占有量と処理速度とのトレードオフの関係にあった。
またZ80は、同時期に新規に開発された他社製の8ビットCPUと比較すると、相対ジャンプは可能であるもののジャンプ先の範囲が狭いなどリロケータブルな構成をとりづらく、バイナリ化したコードをリロケータブルに配置して動作させるドライバやデバッガ、オペレーティングシステム等の環境を作るには不向きとされた。リロケータブルでない一般的なバイナリは、配置アドレスを変更する度に再コンパイルや再リンクが必要となった。またアドレス参照時のオフセットも汎用レジスタ使用時には指定できず、インデックスレジスタ使用のオフセット指定も-128〜0〜127の範囲で制限されるため、C言語のポインタとの相性がよくない面があった。
アドレッシングモードが少ないこともあり、オペコードおよび命令フォーマットを暗記して、直接機械語を記述することも、さほど難しいものでもなかった。
I/Oポート
Z80には8080と同じくメモリアドレスとは別に0からFF(255)までのI/Oポートアドレスを持っていた。ポートアドレスはメインメモリーのアドレスデコーダーを流用していたのか、アドレスバスの下位8ビットに出力されたが、上位8ビットにも同時に値が出力される仕様になっていた。この値にはI/OアドレスをCレジスタで指定する命令の場合はBレジスタ、それ以外の命令はAレジスタの値が用いられる。
この仕様を利用するとI/Oポート空間を16ビットアドレスで取り扱うことができ、VRAMをここに割り当てることで、メインメモリーがVRAMによって圧迫されることを防ぐことができる。そのような構成をとった日本製パソコンには、シャープのX1、ソニーのSMC-777、BUBCOM80などがある。シャープMZ-1500ではオプションのRAMファイル（MZ-1R18、容量64KB）のアクセスにこの仕様を使用している。
しかし、通常に16ビットアドレスをデコードしてI/Oのハードを構成してしまうと、アドレス指定にBCレジスタを指定しないOUT命令の時にアドレスバス上位8ビットにはAレジスタの内容が出力されてしまうため、アドレス指定にBCレジスタを指定しないOUT命令を用いることが出来なくなってしまう。そこで、SONYのSMC-70では、I/Oアドレスの上位8ビットを下位に、下位8ビットを上位にアドレスデコードした。こうして、多くのI/Oアドレスの割り付けが必要なところでは上位8ビット・下位8ビット両方をデコードしてBCレジスタアドレシングのOUT命令でアクセス、他のI/Oアドレスでは元の下位アドレスのみをデコードしてデバイスに割り付けることにより、通常のOUT命令を使用できるようにした。
なお、ブロック入出力命令の場合はBレジスタをデクリメントするため、16ビットアドレスとしては使用しにくい。逆にこれを利用することにより残り回数を周辺デバイスなどが知ることができる。ただし、出力の場合は処理の順番はアドレス出力よりもBレジスタのデクリメントが先のため、アドレスの上位8ビットを利用する場合は1小さい値が出力されることに留意する必要がある。なお、入力の場合はアドレス出力が先である。
Z80の互換CPU
セカンド・ソース契約に基づいてピンコンパチブルな互換製品が他社で生産された。こうした製品には、シャープの「LH0080」モステックの「MK3880」などがある。一方、日本電気(NEC)が独自に互換性のある「μPD780」を出荷したことに対し、ザイログはこれをチップ著作権侵害として訴訟を起こしたが、最終的には両者は和解して製造販売が継続された。
もともとはNMOSプロセスで製造されたが、一部のセカンド・ソースの製造者からは、NEC「μPD70008」、シャープ「LH5080」、東芝「TMPZ84C00」など、独自にCMOSプロセス化し消費電力の低減を図った製品も出荷されている。
また、2002年にシャープがシステム液晶のデモンストレーションとしてガラス基板上にZ80を形成し、MZ-80CのCPUと交換し動作させた。
この他にも東欧諸国で、例えば東ドイツのU880、ルーマニアのMMN80CPUや、ソ連のT34など、ライセンスによらないクローン製品があった。
派生品
ナショナル・セミコンダクターからは、CMOS化とともに、インテル8085のようにアドレスバスの下位とデータバスとをマルチプレックスさせ、Z80とソフトウェアの互換性を持つ「NSC800」が製造された。ただし8085とはピン配置が異なり、置き換えだけでの移行はできない。
現在でも制御、組込用として、メモリおよび周辺機器の制御用回路を単一のパッケージに集積したLSIが製造されており、ASICのIPコアとしてZ80の互換プロセッサを用意するデバイスメーカーも多い。Z80 IPコアは、本家の「ALUが4ビットのため、多くの演算で複数クロックを必要とする」「レジスタがダイナミック動作をするため、クロックを停止できない」「LDx、LDxRのような繰り返し実行する命令やインデックスレジスタを使う命令等、組み込み用途では不要な複雑な命令がある」といった欠点を解消した物も提供されている。