Z80 は、米国ザイログによって製造された 8ビット・マイクロプロセッサーである。1976年に発表され、1980年代の中頃までは、パーソナルコンピューターのCPUを中心に幅広い用途を支えてきた。その後、特にセカンドソースメーカーから周辺デバイスを集積した製品も開発された。組み込み用途などではASICやFPGAのIPコアとして利用されることが多い。

2024年4月にザイログはオリジナルのZ80の生産を終了することを発表したが、流通在庫やライセンス品があるのでしばらく入手性には問題はない模様。

## 概要

嶋正利らインテルを退社したIntel 8080の開発スタッフが設計を行っており、8080とはバイナリーレベルで「ほぼ」上位互換性があり、多くのソフトウェアがそのまま動作する。

ザイログオリジナルの製品としてクロック周波数が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)でファミリーを構成していたのに対応して、Z80もZ80SIO、Z80CTC、Z80PIOや、Z80DMAでZ-80ファミリーを構成する。また、これらを1チップに集積したマイコンがある。

開発者の間では、しばしば「ゼッパチ」と略して呼ばれる。同社にはZ8というマイクロコントローラーもあるが、「ゼッパチ」の呼称はもっぱらZ80に対して使われる。

## ハードウェア

Z80はインテルの 8080マイロプロセッサーの改良型といえる製品であり、他のインテル系CPUと同じくリトルエンディアンである。8080に対して若干の拡張、電源の 5V単一化、より高いクロック周波数への対応などが図られた。メモリー空間は16ビット幅のアドレスバスで示される64KiBで、それ以上のメモリー空間を操作する場合には、外部にバンク切り替え回路やMMUなどを追加する必要がある。

当初のZ80には存在しなかった区分ではあるが、現在のZ80はCMOS版とNMOS版に区分されている。NMOS版は低価格、高性能、CMOS版は高性能、低消費電力設計である。NMOS版の最大動作クロック周波数は品番の末尾のサフィックス(アルファベット)の有無と種類で識別できる。Z80が2.5MHz版、Z80Aが4MHz版、Z80Bが6MHz版、Z80E若しくはZ80Hが8MHz版など。トランジスター数は8,200個。CMOS版ではZ84C0006が6.17MHz、Z84C0008が8MHz、Z84C0010が10MHz、Z84C0020が20MHz動作となっている。Z80H(40ピンDIPプラスチックパッケージ)の価格は1982年当時1000個ロット時で19.95ドルであった。Z80Hに対応するZ8500周辺ファミリーがサポートされ、Z8530シリアル・コミュニケーション・コントローラー、Z8531非同期シリアル・コミュニケーション・コントローラー、Z8536カウンター/タイマー・パラレルI/Oユニット、Z8538バスコントロールI/Oインターフェイス、Z8060 FIFOエキスパンダー、Z8516 ダイレクト・メモリー・アクセス・ユニットなどがある。

8080に対して、8ビット汎用レジスターを2セット備え切り替え可とする、IXとIYの2つのインデックスレジスターを使用したメモリー操作を含む命令の増強、DRAMのリフレッシュ(情報を維持)する機能の内蔵とそのためのRレジスタの追加、割り込みモードの追加、相対アドレスによるジャンプ命令の追加、ワイヤードロジックによる命令の実行、などの追加や変更が行われている。

割り込みモードは、8080互換のモード0に加え、RST38を行うモード1、Z80周辺LSIと組み合わせて最大128レベルの割り込みを行うモード2がある。モード0では、8080と同様に割り込みコントローラ8259と組み合わせて使用するのが前提である。モード1では、割り込みルーチンで割り込み要因を特定してそれぞれの処理ルーチンへ分岐するので割り込み用の回路は最小限で済む。モード2では、Z80用周辺LSI間でデイジーチェーンを作り、よりCPUに近い周辺LSIの割り込みが優先されると共に、後続の周辺LSIに割り込み処理中を示す信号を送ってより優先順位の低い割り込みを抑制するので、8259の様な割り込みコントローラを必要とせず自然に割り込み優先順位と多重割り込みの制御や管理が行える。

割り込みには、NMI ( Non Maskable Interrupt ) も追加されており、電源断時などの非常処理に用いることが想定されている。

また、正式には命令表に無い未定義命令があり、多くが命令のフォーマットに準ずる動作をした。機能的に既存の命令と重複するものが多かったが、16ビット幅のインデックスレジスタIX, IYを、上位バイトと下位バイトに分割して8ビットレジスタとして使うものなど一部は後継のZ280のマニュアル中で正式にドキュメント化されている。但し、Z-80においては飽くまでも非公式の命令であるため互換プロセッサの一部では期待どおりの動作をしないケースもあり、日立のHD64180では未定義トラップがかかる。

ハードウェア上の非公開の機能として、Z80のNMOS版、CMOS版には通常のリセットの他に、特別なリセット(スペシャルリセット)が存在し、Zilog社に在籍していた嶋正利、フェデリコ・ファジン、ラルフ・アンガーマンの3氏による米国特許4486827として1984年12月4日に成立している。スペシャルリセットは通常のリセット同様、リセット入力ピンを利用するが、通常リセットより短いリセットパルス幅(2クロック以内)が与えられる必要がある。スペシャルリセットが有効になるとPC(プログラムカウンター)のみがリセットされ、他のレジスタは一切変わらない。特許や他のリソースに示されているスペシャルリセットの応用はエミュレータやマルチタスキング等である。

製造には、この頃使われ始めたイオン打ち込み技術が使用された。当時、互換品の製造にあたりライセンス契約を結んでセカンドソースとなったり、クリーンルーム設計による独立実装によるのではなく、チップの顕微鏡写真からマスクを起こしてデッドコピーを行う一部の日本企業があったため、イオン打ち込み技術はその対策のためにも使われた。イオン打ち込みにより、エンハンスメント(ノーマリーオフ)に見えるが実はディプリーション(ノーマリーオン)というトランジスタを6個ほど仕組み、Z-80のオリジナルチップから素直にマスクパターンをデッドコピーすると正しく動作しなくなるようにして時間稼ぎをした。

## 特徴

8080との差別化のため、命令の1サイクル目(M1サイクル)では他のサイクルに比べて所要ステート数が少なくなっている。通常のメモリサイクルが3ステート必要なのに対しM1サイクルでは2ステートである。タイミングチャート上はM1サイクルには4ステート必要なように見えるが、後半の2ステートはリフレッシュ機能のために使用され、通常のメモリアクセスとは関係がない。

通常のリードライトサイクルが3ステート(T1/T2/T3)なのに対し、IN/OUT命令では、自動的にウェイトサイクル(TW)が挿入され、4ステート(T1/T2/TW/T3) となる。ウェイトサイクル中に、/WAIT(active low) 信号がサンプリングされ、アサートされている限りウェイトサイクルを継続することで、応答が遅いIOデバイスに対応することが可能となっている。

これは同じ命令を実行しても8080よりも高速に実行するためのZ80のアピールポイントの一つだった。反面、このM1サイクルだけのために速いメモリが必要になり、ハードウェア設計者からは不評を買っていた。

Z80には「ある処理を行う際に、特定の命令の組み合わせを用いると、普通に命令を書いた場合よりも実行にかかるクロック数や命令の総バイト数を少なくできる」というテクニックが多数存在し、これらは「最適化」「クロック削り」などと呼ばれた。例えば、Z80にて追加されたブロック転送命令やインデックスレジスタ命令は、一連の処理に必要なプログラムサイズを節約できる反面、他の命令を組み合わせて同等の処理を行うよりも所要クロック数が増大するといったデメリットもあり、命令のメモリ空間上の占有量と処理速度とのトレードオフの関係にあった。

またZ80は、同時期に新規に開発された他社製の8ビットCPUと比較すると、相対ジャンプは可能であるもののジャンプ先の範囲が現在位置より-128から+127と狭く、PC相対アドレッシングが無いなどリロケータブルな構成をとりづらく、バイナリ化したコードをリロケータブルに配置して動作させるドライバやデバッガ、オペレーティングシステム等の環境を作るには不向きとされた。リロケータブルでない一般的なバイナリは、配置アドレスを変更する度に再コンパイルや再リンクが必要となった。またアドレス参照時のオフセットも汎用レジスタ使用時には指定できず、インデックスレジスタ使用のオフセット指定も-128〜0〜127の範囲で制限されるため、C言語のポインタとの相性がよくない面があった。

アドレッシングモードが少ないこともあり、オペコードおよび命令フォーマットを暗記して、直接機械語を記述することも、さほど難しいものでもなかった。特に、オペコードを8進数で表現すると、命令フォーマットの区切りに適合した。

## レジスタ

A,B,C,D,E,H,Lは8080の同名レジスタと同じ機能を持つ。
Fは8080上位互換のフラグレジスタである。
これらの8ビット汎用レジスタとアキュムレータ、フラグレジスタはZ80では切り替えて使える裏レジスタが用意された。
但し、裏表どちらのレジスタであるかを判断する命令はない。
Rはリフレッシュカウンタで、オリジナルのZ80では下位7ビットが変化し、最上位ビットは初期値不定で、値を書き込むとその最上位ビットが保持される。周辺LSI統合CPU・上位互換CPUでは、リフレッシュカウンタを8ビットに拡張し、最上位ビットが保存されないものもあるほか、リフレッシュ機構をCPUから完全に切り離してRレジスタが変化せず書き込んだ値が保存されるものもある。

## 命令セット

8080に存在する命令についてはパリティフラグを除く挙動とバイナリは同一となり、基本的には上位互換であるため非互換部分に留意すれば同一のバイナリを動作させる事も可能である。8080用のOSであるCP/Mや、そのアプリケーションもそのまま動作した。

Intelによる8080の上位互換プロセッサであるIntel 8085とは拡張部分の命令セットや挙動が違うため非互換である。

アセンブラでプログラムを記述する際には、ザイログ社が定義したZ80のニモニックならびにオペランドの記述は、インテルのi8080やi8085のものと異なる。ザイログ社のものは記述の容易さが勘案され、より整理されたものとなった。例えば、レジスタ間での値の移動、即値をレジスタに入れる、レジスタペアで示されるメモリとレジスタの間の転送命令のニモニックはすべて "LD" であり、アドレッシングモードを意識する必要がなく初心者にも判りやすい。反面、存在しない組み合わせの "LD" 文を記載してエラーとなるなど、i8080やi8085のニモニックと比較して、アドレッシングモードや実際の命令がはっきりせず、使えない組み合わせのオペランドの区別がしにくいなどの状況が発生している。オペランドの順番は、ディスティネーションが前でソースが後である。また、オペコードの仕様上、HLレジスタとインデックスレジスタ間での処理は組み合わせに制限がある。

ここではZ80で追加された命令のみ示す。8080からある命令についてはIntel 8080#命令セットを参照。また、IXとIYについては同等の命令が存在するが、ここではIXのみを示す。

- rは8ビットレジスタA,B,C,D,E,H,Lまたは(HL)を表す。
- rrは16ビットレジスタBC,DE,HL,SPを表す。
- rxは16ビットレジスタBC,DE,IX,SPを表す。
- nは8ビットの即値を表す。
- nnは16ビットの数値(即値またはメモリアドレス)を表す。
- bはビット位置0~7を表す。
- dはインデックスレジスタの変位(符号つき8ビット)を表す。
- eはプログラムカウンタの変位(符号つき8ビット)を表す。

### ブロック命令

8086のストリング命令、80186/V30のI/Oストリング命令に相当する。LDIRが最もよく使われる。

## 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ポート空間をそのままデコードして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

Z80は一番古い2MHzのZ80に始まりクロックアップされた物や機能追加された物がザイログより発売されている。それらザイログのZ80の主な物のメーカーの型番と機能を記載する。

- Z0840004PSC

- Z84C006PSC

## Z80の互換CPU

セカンド・ソース契約に基づいてピンコンパチブルな互換製品が他社で生産された。こうした製品には、シャープの「LH0080」モステックの「MK3880」などがある。一方、日本電気(NEC)がライセンスを得ず独自に互換性のある「μPD780」を出荷したことに対し、ザイログはこれを著作権侵害として訴訟を起こしたが、最終的には両者は和解して製造販売が継続された。

オリジナルのZ-80はNMOSプロセスで製造されたが、一部のセカンド・ソースの製造者からは、NECのZ80A互換「μPD70008AC-4」Z80H互換「μPD70008AC-8」、シャープ「LH5080」、東芝「TMPZ84C00」など、独自にCMOSプロセス化し消費電力の低減を図った製品も出荷されている。

また、2002年にシャープがシステム液晶のデモンストレーションとしてガラス基板上にZ80を形成し、MZ-80CのCPUと交換し動作させた。

この他にも東欧諸国で、例えば東ドイツのU880、ルーマニアのMMN80CPUや、ソ連のT34など、ライセンスによらないクローン製品があった。

## 派生品

ナショナル・セミコンダクターからは、CMOS化とともに、Intel 8085のようにアドレスバスの下位とデータバスとをマルチプレックスさせ、Z80とソフトウェアの互換性を持つ「NSC800」が製造された。ただし8085とはピン配置が異なり、置き換えることはできない。

2003年現在でも制御、組込用として、メモリおよび周辺機器の制御用回路を単一のパッケージに集積したLSIが製造されており、ASICのIPコアとしてZ80の互換プロセッサを用意するデバイスメーカーも多い。Z80 IPコアは、本家の「ALUが4ビットのため、多くの演算で複数クロックを必要とする」「レジスタがダイナミック動作をするため、クロックを停止できない」「LDx、LDxRのような繰り返し実行する命令やインデックスレジスタを使う命令等、組み込み用途では不要な複雑な命令がある」といった欠点を解消した物も提供されている。

## 他社によるZ80上位互換CPU

以下にZ80互換のCPUのうち、ザイログ以外の会社で開発された上位互換性を持つものを示す。高速化を図ったものや、周辺デバイスを集積したものである。

- TMPZ84C00AP-6

- TMPZ84C00AP-8

- TMPZ84C00AM-6

- TMPZ84C00AM-8

- TMPZ84C011

- TMPZ84C013

- TMPZ84C015

- TMPZ84C112

- TMPZ84C20AP-6

- TMPZ84C710

- TMPZ84C711

- TMPZ84C810

## 後継CPU

ザイログ自身の開発による上位互換CPUを以下に示す。

## Z80に類似のアーキテクチャー

Z-80のアーキテクチャー(プログラミングモデル・レジスタ構成等)を参考に、拡張を行ったアーキテクチャ等として、東芝のTLCS-90シリーズ、TLCS-900シリーズ、Rabbit2000シリーズがあるが、これらはZ-80とのバイナリ互換性はない。
また、Z-80より一部の機能や命令を削除したものとしてSHARPのLR35902がある。
これらZ80の技術が流用できるCPUを開発年順に記す。

## 主な開発環境

Z80は、8080とバイナリレベルで互換性があり、そのDOSであるCP/M、及びCP/M上で動作する各種のソフトウェアが利用可能である。以下はCP/M上の動作を前提に供給されたものの一部である。

- BASIC
  - BASIC80
- アセンブラ
  - MACRO80
  - MAC/RMAC
- C言語
  - BDS-C
  - LSI C-80
  - Hitech-C