Z80

Z80は、ザイログによって設計され1976年に発表された8ビットマイクロプロセッサである。現在も広く使われている。
 概要 
嶋正利らインテルを退社したIntel 8080の開発スタッフが設計したマイクロプロセッサである。#歴史

8080とはバイナリレベルで「ほぼ」上位互換性があり、多くのソフトウェアがそのまま動作し、その上、8080よりも性能が良くなっている。
ザイログオリジナルの製品としてクロック周波数が2.5MHzのZ80から20MHzの高速版まで存在する。

当初から、安定供給のためにMostekによるセカンドソース品が並行的に供給され、そのほか互換品を製造するメーカーも増えた。

Z80は "8080よりも高速・高性能な8080互換CPU"として高評価となり採用機が続出、S-100バス互換機ののCPUにこぞって搭載されるなど、マイクロコンピュータ（パーソナルコンピュータの初期段階）の市場を支配した。日本国内においても、1970年代の末から80年代前半頃にかけてビジネス用のオフィスコンピュータやホビーパソコンで採用された。1980年代の中頃までは、パーソナルコンピュータを中心にしつつも幅広い用途を支えてきた。その後、特にセカンドソースメーカーから周辺デバイスを集積した製品も開発され、使いやすくなり、ますますパーソナルコンピュータ以外での使用が増えていった。
 組み込み用途 
組み込み用途では初期のゲーム専用機などにも搭載されていた。
組み込み用途などではASICやFPGAのIPコアとして利用されることが多い。2007年ころには実チップのみならず、FPGAやASIC用のIPコアが使用できる状態になっていた。商用の互換コアは20社以上存在し、オープンソースのIPコアも5種類以上存在している。
 Z80ファミリ 
8080がコンパニオンチップである8251（USART）、8253（CTC / PIT）、8255（PPI）でファミリーを構成していたのに対応して、Z80もZ80SIO、Z80CTC、Z80PIOや、Z80DMAでZ-80ファミリーを構成する。また、これらを1チップに集積したマイコンがある。
 Zilogオリジナル品の終了と、互換品などの継続 
2024年4月にザイログはオリジナルのZ80の生産を終了することを発表したZilog Calls Time on the Venerable Z80, Discontinues the Standalone Z84C00 CPU Family (huckster.io)が、流通在庫もあり、オリジナル品もしばらく入手できる模様。なお、互換品、ライセンス品の製造が続いているので、Z80は使い続けることができる。
 Z80の読み方 
本国アメリカでの読み方
Z80の本国アメリカでの発音は、ズィー・エイティー（Z-Eighty）。アメリカの技術者のほぼ全員がこう発音する。技術カンファレンスや動画、講義、解説記事でもこの読み方が一般的。

イギリス英語での読み方
イギリスやカナダなどイギリス英語圏では、「Z」は「ゼッド（Zed）」と発音されるため、英国では「Z80」は 「ゼッド・エイティー（Zed Eighty）」 と発音される。

日本国内
日本国内は読み方が定まっていないので、項目末尾の #日本国内での発音で解説。
 ハードウェア 
Z80はインテルの 8080マイロプロセッサの改良型といえる製品であり、他のインテル系CPUと同じくリトルエンディアンである。8080に対して若干の拡張、電源の 5V単一化、より高いクロック周波数への対応などが図られた。メモリ空間は16ビット幅のアドレスバスで示される64KiBで、それ以上のメモリ空間を操作する場合には、外部にバンク切り替え回路やMMUなどを追加する必要がある。
8080と同様、アドレスバスをメモリ空間と共有するI/Oポートも用意されており、メモリ空間を圧迫することなく周辺装置との入出力を可能にしているが、後述するように上位アドレスの挙動は8080と異なり独特なものとなっている。

当初の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のマニュアル中で正式な命令として仕様に組み込まれたものもある。但し、Z80においてこれらの命令は飽くまでも非公式の命令であり、互換プロセッサの一部や後継プロセッサでは期待通りの動作をしなかったり、別の命令が割り当てられていることもある。日立のHD64180では未定義トラップがかかる。

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

製造には、この頃使われ始めたイオン打ち込み技術が使用された。当時、互換品の製造にあたりライセンス契約を結んでセカンドソースとなったり、クリーンルーム設計による独立実装によるのではなく、チップの顕微鏡写真からマスクを起こしてデッドコピーを行う一部の日本企業があったため、イオン打ち込み技術はその対策のためにも使われた。イオン打ち込みにより、エンハンスメント（ノーマリーオフ）に見えるが実はディプリーション（ノーマリーオン）というトランジスタを6個ほど仕組み、Z-80のオリジナルチップから素直にマスクパターンをデッドコピーすると正しく動作しなくなるようにして時間稼ぎをした嶋正利『マイクロコンピュータの誕生』p.142。
 特徴 
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から拡張されたビット）
 b7:S　符号
 b6:Z　ゼロ
 b5:未使用 （0に固定）
 b4:H　AUXキャリー（パックBCD演算用）
 b3:未使用 （0に固定）
 b2:P/V *　パリティ・オーバーフロー（8080ではP パリティ）
 b1:N *　減算（ADD命令で0、SUB命令で1になる。8080では未使用、0に固定）
 b0:C　キャリー
 命令セット 
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ビット）を表す。
 転送・交換命令 
 LD r,(IX+d)
 LD (IX+d),r
 インデックスレジスタを用いたメモリとレジスタの転送。rに(HL)は指定できない。
 LD (IX+d),n
 メモリに即値をストアする。
 LD IX,nn
 インデックスレジスタに即値をロードする。
 LD IX,(nn)
 指定アドレスのメモリの内容をインデックスレジスタにロードする。
 LD (nn),IX
 インデックスレジスタの内容を指定アドレスのメモリにストアする。
 LD BC,(nn)
 LD DE,(nn)
 LD SP,(nn)
 指定アドレスのメモリの内容を16ビットレジスタにロードする。8080ではHLレジスタでしかできなかった。
 LD (nn),BC
 LD (nn),DE
 LD (nn),SP
 16ビットレジスタの内容を指定アドレスのメモリにストアする。8080ではHLレジスタでしかできなかった。
 LD SP,IX
 インデックスレジスタの内容をSPレジスタに転送する。
 EX AF,AF'
 AFレジスタとAF'レジスタを交換する。
 EXX
 BC,DE,HLレジスタとBC',DE',HL'レジスタを交換する。
 LD A,I
 LD I,A
 割り込みベクタレジスタとAレジスタの転送。LD A,Iを使用するとき、特にNMOS品ではこの命令を実行中に割り込みがかかった場合、元の割り込み状態に関わらず割り込み禁止になる場合がある。このバグ（エラッタ）はNMOS品は全般にある。CMOS品でも、東芝TMPZ84Cxx・日立HD64180 R0マスク・他にはこのバグがある。ザイログのものは修正されている。HD64180はR1マスクおよびZバージョンで修正済み。シャープLH5080も修正済みの模様。NEC μPD70008は不明。
 LD A,R
 LD R,A
 リフレッシュレジスタとAレジスタの転送。オリジナルのZ80においてRの下位7ビットは常に変動しているため、LD A,Rは簡易な乱数発生器としてよく使われる。互換CPUでは、8ビット全てが変動したり、変動しないものもある。
 LD A,Rについては、チップのバージョンにより前述のLD A,Iと同様の割り込み禁止となる問題が発生する場合がある。
 算術演算命令 
 ADD IX,rx
 16ビットレジスタの内容をインデックスレジスタに加算する。
 ADC HL,rr
 16ビットレジスタの内容とCフラグをHLレジスタに加算する。ADD命令は8080から存在した。
 SBC HL,rr
 16ビットレジスタの内容とCフラグをHLレジスタから減算する。なお16ビットのSUB命令はない。そのため8ビットの算術演算命令のうちSUB命令だけAを表記しない。
 INC IX
 インデックスレジスタの内容をインクリメントする。
 DEC IX
 インデックスレジスタの内容をデクリメントする。
 NEG
 Aレジスタの2の補数をとる。
 ローテート・シフト命令 
 RLC r
 RLC (IX+d)
 レジスタまたはメモリの内容とCフラグを連結して左ローテートする。RLC Aと8080からあるRLCAとではフラグの変化が異なる。
 RRC r
 RRC (IX+d)
 レジスタまたはメモリの内容とCフラグを連結して右ローテートする。RRC Aと8080からあるRRCAとではフラグの変化が異なる。
 RL r
 RL (IX+d)
 レジスタまたはメモリの内容を左ローテートする。RL Aと8080からあるRLAとではフラグの変化が異なる。
 RR r
 RR (IX+d)
 レジスタまたはメモリの内容を右ローテートする。RR Aと8080からあるRRAとではフラグの変化が異なる。
 RLD
 RRD
 Aレジスタの下位4ビットとHLを連結して4ビット単位でローテートする。BCD用の命令。
 SLA r
 SLA (IX+d)
 レジスタまたはメモリの内容を左に算術シフトする。
 SRA r
 SRA (IX+d)
 レジスタまたはメモリの内容を右に算術シフトする。
 SRL r
 SRL (IX+d)
 レジスタまたはメモリの内容を右に論理シフトする。
 ビット操作命令 
 BIT b,r
 BIT b,(IX+d)
 レジスタまたはメモリの特定のビットをテストする。
 SET b,r
 SET b,(IX+d)
 レジスタまたはメモリの特定のビットをセットする。
 RES b,r
 RES b,(IX+d)
 レジスタまたはメモリの特定のビットをリセットする。
 ジャンプ・コール・リターン命令 
 JR e
 無条件相対ジャンプ。
 JR NZ,e
 JR Z,e
 JR NC,e
 JR C,e
 条件付相対ジャンプ。
 DJNZ e
 Bレジスタをデクリメントして0でなければ相対ジャンプする(Decrement and Jump if Non Zero)。ループに使う。
 JP (IX)
 インデックスレジスタの内容をPCに転送する。
 RETI
 割り込みからのリターン。
 RETN
 NMIからのリターン。
 スタック操作命令 
 PUSH IX
 インデックスレジスタの内容をスタックにプッシュする。
 POP IX
 スタックトップの内容をインデックスレジスタにポップする。
 EX (SP),IX
 インデックスレジスタとスタックトップの内容を交換する。
 入出力命令 
 IN r,(C)
 OUT (C),r
 CレジスタまたはBCレジスタによる間接指定の入出力。rに(HL)は指定できない。
 CPU制御命令 
 IM x
 割り込みモードを設定する。xの値は0〜2。
 ブロック命令 
8086のストリング命令、80186/V30のI/Oストリング命令に相当する。LDIRが最もよく使われる。
 LDI/LDD/LDIR/LDDR
 ブロック転送。HLレジスタの指すメモリの内容をDEレジスタの指すメモリへ転送することを、DE,HLレジスタをインクリメント/デクリメントしながらBCレジスタの回数だけ繰り返す。LDIRとLDDRは転送元と転送先の領域が重なる場合に使い分ける。
 CPI/CPD/CPIR/CPDR
 ブロックサーチ。AレジスタとHLレジスタの指すメモリの内容を比較することを、HLレジスタをインクリメント/デクリメントしながらBCレジスタの回数だけ、あるいは比較結果が一致するまで繰り返す。
 INI/IND/INIR/INDR
 ブロック入力。Cレジスタの指すI/OポートからHLレジスタの指すメモリに入力することを、HLレジスタをインクリメント/デクリメントしながらBレジスタの回数だけ繰り返す。
 OUTI/OUTD/OTIR/OTDR
 ブロック出力。HLレジスタの指すメモリからCレジスタの指すI/Oポートに出力することを、HLレジスタをインクリメント/デクリメントしながらBレジスタの回数だけ繰り返す。
 I/Oポート 
Z80では下記のような仕様により、条件付きでI/Oアドレス空間を16bitとして扱える仕様となっているが、8bitのアドレス空間であるように考えられたり、設計として下位アドレスのみ有効であると認識されることが多い仕様でもある。2026年現在でも解説するWebサイトでも下位8bitのみが有効といった記述になっていることも少なく無い。
マニュアルの版によって表現の若干の違いはあるものの、レジスタペア、16bit空間としてではなく、下位8bitと上位8ビット各々に入出力される値として記述され積極的にアドレスを拡張したような表記はない反面、この挙動を利用することに対して注釈なども存在せず、応用によってアドレス空間を広くとった実装が存在している。

i8080ではアドレスバスにI/O空間へのアクセス時プロセッサ内部のレジスタを介し上位、下位共に同じ値が出力される設計になっていたMCS-80 FAMILY USER'S MANUAL Chapter 2。対し、Z80では直接入出力命令では上位アドレスにアキュムレータ、下位アドレスに指定した値、入出力データのレジスタは無条件にアキュムレータが指定されるようになっているが、ブロック転送を含む全てのレジスタ間接入出力ではアドレスバスにCレジスタが下位8bit、Bレジスタの値が上位8bitに出力される仕様となっている。

前述のとおり16bitアドレスのI/Oポート空間をそのままデコードするハードウェアを構成してしまうと、直接入出力命令は引き渡すデータと上位アドレスは同じものになってしまう。また、Z80で追加されたリピート命令はBをカウンタに使用する仕様になっているため、間接入出力命令では上位アドレスとループカウンタが同期して値が変化してしまう以上命令としての仕様であるBの値をカウンタ値としてゼロになるまで繰り返すという利用はかなり条件を選ぶものとなっている。逆にこれを利用することにより残り回数を周辺デバイスなどに知らせるなどの応用も可能であるが、出力の場合は処理の順番はアドレス出力よりもBレジスタのデクリメントが先のため、アドレスバスには1小さい値が出力されることに留意する必要がある。なお、入力の場合はアドレス出力が先である。

この仕様を利用し大きなアドレス空間を必要とするVRAMをここに割り当てることで、メインメモリの自由度を向上させる実装が見られた。そのような構成をとった日本製パソコンには、シャープのX1、ソニーの/SMC-777、BUBCOM80などがある。シャープMZ-1500ではオプションのRAMファイル（MZ-1R18、容量64KiB）のアクセスにこの仕様を使用している「MZ-1500 オーナーズマニュアル」（付属説明書）に具体的な記述あり。。

このアドレス空間の拡張と命令の利便性に対し、SMC-70/SMC-777では、I/Oアドレスの上位8bitを下位に、下位8bitを上位のアドレスにデコードするというアプローチをとった。多くのI/Oアドレスの割り付けが必要なところでは16bitの空間としてデコードし、他のI/Oアドレスでは下位アドレスのみをデコードし8bitの空間とすることにより直接入出力命令を利用可能にするほか、VRAMに対してブロック入出力命令をアドレスのデクリメンタとして応用した転送も可能にしている。欠点としてはエンディアンを逆にして扱う命令は存在しないため、下位アドレスの繰り上がり、繰り下がりに注意して実装する必要がある。

Z80がi8080の上位互換とされており、該当する直接入出力命令のアドレス指定が8bit幅であること、ザイログ形式のニーモニックが8bitの空間であるような指定などの先入観や思い込み、ループ命令がBレジスタをカウンタとして用いることも含め、それらの仕様が一部の命令の実用性を打ち消すような仕様であること、関連書籍によっては積極的な記述が少ないないしは特定のハードウェアを対象とした解説など上位アドレスを無視した記述などから、隠し機能や仕様外の仕様と考えられていることもあるが、発売当時のTechnical Manualでも前述の仕様は明記されており、互換プロセッサの動作も多くがこの仕様を踏襲したものとなっている。ハードウェアの設計という観点では、記述を避けられない「仕様」ではあり、結果としてアドレスバスに対して任意の16bitの値を指定できる以上アドレス空間は16bitとして8bitのデータを入出力可能であるという事実は存在している。また、上位アドレスにも仕様に即した値が出力される以上、ハードウェアとしてはアドレスバスの上位8bitも無効ではない。下位8bitのみがデコードされたハードウェアをソフトウェア設計側から見た場合、上位アドレスをコントロールできない以上8bitアドレス空間として見えるがプロセッサの挙動とシステムとしての挙動は別である。

以上のように意図的にアドレス空間の拡張を行ったとするか実装上の都合で生まれた仕様に一定の用途があり活用された実績があるかは別として、未定義命令と異なり上位アドレスの挙動はマニュアルに明確に定義された仕様であり、アドレス空間の拡張はその仕様を応用した実装の一つである。尚、Z80DMAもI/O並びにメモリ空間へのアクセスを行うが、双方を16bit幅の空間として扱えるようになっている。
 歴史 
 初期の経緯 
フェアチャイルドセミコンダクターおよびその後のインテルにおいて、物理学者であり技術者でもあったフェデリコ・ファジンは、基本的なトランジスタおよび半導体製造技術の開発に従事していた。また彼は、インテルにおけるメモリおよびマイクロプロセッサ設計の基本的な手法を構築し、Intel 4004、Intel 8080のほか、いくつかのIC開発も主導した。嶋正利は、4004および8080の主要な論理設計およびトランジスタレベルの設計者であり、その際の監督はファジンで、一方、カスタム集積回路設計の責任者はラルフ・アンガーマン（:en:Ralph Ungermann）であった。

1974年初頭、インテルはマイクロプロセッサを単体で販売する製品というよりも、主力製品であるスタティックRAMおよびROMの販売促進手段として位置付けていた。組織再編により、以前は独立していた部門の一部がレス・ヴァダス（:en:Leslie L. Vadász）の指揮下に置かれたことで、マイクロプロセッサの社内での位置づけがさらに弱まった。この年、1973年から1975年にかけての不況(:en:1973–1975 recession）が最悪の状況に達し、インテルは数名の従業員を解雇した。このような状況に置かれた結果、ファジンは不満を募らせ、アンガーマンを誘って酒を飲みに行き、独立して会社を起こすことに興味があるか尋ねた。アンガーマンは即座に同意し、当時インテルでの業務が減っていたこともあり、1974年8月または9月に退職した。ファジンもそれに続き、彼のインテルでの最終出勤日は1974年のハロウィンであった。嶋正利はその話を聞いて新会社への参加を申し出たが、当時はまだ製品設計も資金もなかったため、しばらく待つように伝えられた。

設立されつつあったがまだ社名もないこの会社は、まずシングルチップ・マイクロコントローラ（名称は2001）の設計に着手した。彼らはSynertek社(英語版)と会合を持ち、その製造ラインでの生産について協議したが、ファジンがコスト構造を把握するにつれ、自社製造ラインを持つインテルのような企業の製品との競争では、2001のような低価格製品では勝負にならないと明らかとなった。そこで彼らは、より複雑なマイクロプロセッサ（当初の名は "Super 80"）の設計に方向転換し、新設計に取り掛かった。この設計の主な特徴は、8080のような従来の−5V、+5V、12Vではなく、+5Vバスのみを使用することであった。この新設計は8080との互換性を持たせつつ、Motorola 6800のいくつかの機能、たとえばインデックスレジスタや改良された割り込み処理機能などを追加することを意図していた。
 エクソンからの出資と本格的な開発の開始 
まだ会社設立の途中だったのに、業界誌 Electronic News （英語版）が このカンパニー（まだ、"人の集まり"にすぎない状態）の存在を聞きつけ、その物語を記事にした。これがエクソンのハイテク投資部門であるExxon Enterprisesの目に留まった。当時、不況の影響でベンチャーキャピタルは非常に限られており、1975年全体で業界全体への投資総額は1,000万ドルに過ぎなかった。エクソンの何者かが、まだ社名すらつけられていなかったこのカンパニーに連絡を取り、会合が設けられた。その結果、1975年6月に初期投資として50万ドルが提供された。

出資交渉と設計作業が進む中、嶋正利は1975年2月にこの新会社に加わった。嶋はすぐに高水準な設計に取り掛かり、自身のアイデアも多数取り入れた。特にNECのミニコンピュータでの経験を活かし、2セットのレジスタを設けて割り込みに即応できるようにするという概念を導入した。アンガーマンは、この設計を補完する一連のコントローラおよび周辺ICの開発に着手した。

この時期に嶋正利は、論理設計をリアルタイムで物理設計に落とし込む能力を持つ人物、という伝説的な評判で知られるようになった。新機能について議論している最中に、彼がその実装に必要なチップ上の面積を即座に割り出し、設計が大きすぎると判断すれば即座に却下することもあった。設計の初稿は1975年4月までに完成し、嶋は5月初頭には論理レイアウトを完了させた。論理設計の第2版は8月7日に発行され、バスの詳細設計は9月16日までに完成した。テープアウトは11月に完了し、テープから製造用マスクへの変換にはさらに2か月を要した。

ファジンはこの時点ですでに製造パートナーを探し始めていた。SynertekおよびMostekの両社は、設計に対応可能なデプレッションモードの製造ラインを整備していた。以前から接触のあったSynertekにまず交渉を持ちかけたが、同社の社長は「セカンドソースライセンス」、すなわち設計を自社製品として販売する権利を要求してきた。ファジンは、これでは自社で製造ラインを整備しても競争にならないと考え、この交渉は決裂した。次に彼はMostekと交渉し、Zilogが自社ラインを整備するまでの間の独占製造契約を締結し、その後セカンドソースライセンスを供与することで合意した。

新会社の名称についてさまざまな候補が検討されたが、いずれも翌日に思い出すこともできないくらい、記憶に残らないものばかりであった。ある日、ファジンとアンガーマンが integrated logic（集積ロジック）という用語をもとにした名称案を考えていたとき、アンガーマンが「Zilogはどうか？」と提案した。ファジンは即座に同意し、その名なら「集積ロジックの最終到達点」という意味になりうる、と述べた。翌日再び会った際、両者ともその名前を即座に思い出したことから、正式に「Zilog」という社名が決定した。
 生産体制の確立 
Mostekからの最初のサンプルは1976年3月9日に納品された。同月末には、アセンブラベースの開発システムも完成していた。この時点でZ80の周辺ICの一部が開発中であり、翌年にかけていくつかの製品が市場に投入された。これには、Z80 CTC（カウンタ／タイマ）、Z80 DMA（ダイレクトメモリアクセス）、Z80 DART（デュアル非同期受信送信器）、Z80 SIO（同期通信コントローラ）、Z80 PIO（パラレル入出力）が含まれる。

Z80は1976年7月に正式に発表された。当時、半導体業界では外国メーカーによるチップ設計の無許可複製に対する懸念があった。Zilogの設計チームはリバースエンジニアリングを妨害するため、見た目とは異なる動作をする6つの "トラップ" トランジスタを設計に組み込んだ。嶋正利によれば、NECの技術者は、このトラップにより解析が6か月遅れた、と述べたという。NECはその後、Zilogとの特許侵害訴訟で和解し、Z80およびその他のチップの正規ライセンスを取得した。

Z80の成功を受けて、ファジンとアンガーマンは半導体製造工場の設立に向けてエクソンに追加出資を求めた。エクソンはこれに同意し、Zilogは自社製造ラインを確立した。これにより、ZilogはZ80の総市場の60～70パーセントを獲得することに成功したと推定される。一方、Mostekは正式なライセンスのもと、Z80の互換製品MK3880の製造を許可され、顧客にとってのセカンドソースとなった。インテルとは異なり、当時のスタートアップ企業にとっては、事業継続や供給保証の観点からセカンドソース契約が不可欠と考えられていた。
 様々なZ80 
Z80は一番古い2MHzのZ80に始まりクロックアップされた物や機能追加された物がザイログより発売されている。それらザイログのZ80の主な物のメーカーの型番と機能を記載する。
 Z0840004PSC
 DIP-40(600mil)、NMOS 4MHz
 Z84C006PSC
 Z80CPU 6MHz
 Z80の互換CPU 
セカンド・ソース契約に基づいてピンコンパチブルな互換製品が他社で生産された。こうした製品には、シャープの「LH0080」モステックの「MK3880」などがある。

日本電気(NEC)がライセンスを得ず独自に互換性のある「μPD780」を出荷したことに対し、ザイログはこれを著作権侵害として訴訟を起こしたが、しばらくするうちに、NECがZilog社設計のいくつかの製品のライセンスを得ると同時にZilog社のほうもNEC設計の特定製品を製造するためのライセンスを得るクロスライセンス契約をあらたに結ぶ形で両社は和解を成立させた結果、製造販売が継続された。


オリジナルの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のうち、ザイログ以外の会社で開発された上位互換性を持つものを示す。高速化を図ったものや、周辺デバイスを集積したものである。


 TLCS-Z80シリーズ
 東芝のZ80ファミリーのセカンドソースやそれらを集積した1チップマイクロコントローラ。1983年から発売開始。主に以下の物がある。
 TMPZ84C00AP-6
 動作クロック6MHz。
 TMPZ84C00AP-8
 動作クロック8MHz。
 TMPZ84C00AM-6
 動作クロック6MHz。
 TMPZ84C00AM-8
 動作クロック8MHz。
 TMPZ84C011
 東芝 CMOS版Z80CPU、Z80CTC、Z80PIO非互換パラレルI/Oを集積したチップ。
 TMPZ84C013
 東芝 CMOS版Z80CPU、Z80CTC、Z80SIO等を集積したチップ。
 TMPZ84C015
 東芝 CMOS版Z80CPU、Z80CTC、Z80PIO、Z80SIO、CGC、ウォッチドッグタイマー等）を集積したチップ。また、本家にあたるザイログからも同等のZ84C15が販売されている。ただし、ピン機能の一部が異なる。東芝TMPZ84C015は製造中止。
 TMPZ84C112
 東芝 CMOS版Z80CPU、Z80PIO非互換パラレルI/O、タイマー、256バイトRAM等を集積したチップ。
 TMPZ84C20AP-6
 東芝 TLCS-Z80 PIO : PARALLEL INPUT / OUTPUT CONTROLLER
 TMPZ84C710
 東芝 CMOS版Z80CPU、ISDN基本インターフェイス、Z80SIO等を集積したチップ。
 TMPZ84C711
 東芝 CMOS版Z80CPU、ISDN基本インターフェイス、Z80SIO等を集積したチップ。Z84C710上位互換。
 TMPZ84C810
 東芝 CMOS版Z80CPU、Z80CTC、Z80SIO、パラレルI/O、DMA、MMU、DRAMリフレッシュコントローラ、ウォッチドッグタイマー等を集積したチップ。
 HD64180
 日立製作所（現ルネサス エレクトロニクス）が開発。1984年に登場。高速化されたZ80バイナリレベル互換命令とMMUを集積し、アドレス空間を512KB〜1MBにしたもの。乗算、TST命令などを追加している。IX/IYレジスタを8ビットに分割して使用することはできず、未定義命令トラップがかかる。尚、発売当初はZ80上位互換ではなく、CP/M-80互換CPUと説明した。68系周辺デバイスのバスサイクル（同期バス）に合わせたHD64180R1と、Z80用周辺デバイスのバスサイクル（非同期バス）を直接接続できるHD64180Zがある。ザイログからは、HD64180Zのセカンドソース品としてZ80180と派生製品が出荷され、2022年現在現行製品である。
 MSX-ENGINE
 MSX 向けのカスタムCPU。MSXで使用する周辺LSIを取り込んで製品化されたもの。SANYO から1985年に発売された MPC-1 というMSX1に搭載されたT7775が初である。他にも、T7937、T9763、T9769(MSX-ENGINE2)がある。
 μPD9002
 NEC Vシリーズのひとつで、1987年3月4日発売のPC-88VAが使用。V30が8086の上位互換であるのと同時に8080互換モードを持つように、この石は8086の上位互換であるのと同時にZ80互換モードを持つ。型番が示すとおりVシリーズの通常のラインナップ（μPD70〜）ではなく、カスタムモデルである。チップそのものはV30をベースに周辺回路を統合したV50を基本としているため、Intel 8086とのソケット互換性はないが、PC-88VA2/3においては、V30モード時に8087-1コプロセッサが稼動する数値演算プロセッサソケットが用意されていた。
 R800
 アスキーが開発した、内部16ビットの高速版Z80互換CPU。1990年4月に発表。乗算命令を拡張しているが、使用するレジスタの組み合わせで計算結果が不正になる不具合があるため、実質使用できるレジスタが制限されていた。また隠し命令のうち、IX/IYレジスタの8ビットアクセスを主とするいくつかの命令が正式命令としてサポートされる。Rレジスタが8ビット幅になっている。MSXturboRに搭載された。CPU機能を停止しメモリコントローラとして動作するモードも持ち、同機で使用された。MMUやDMAを集積しているが、仕様がMSXのものとは異なるため使用されなかった。
 KC80, KC82
 川崎マイクロエレクトロニクスのZ80互換の高速版CPU。KC80の改良版KC82をコアにMMUなどを追加した組み込み用ICとしてKL5C8012、KL5C8016、KL5C8020が販売されていた。なお、KC80 CPU単体の KL5C8400 も販売されていた。また、16ビット版で上位互換のKC160も販売されていた。1994年に発売開始、2009年7月1日に一連の汎用マイコンの生産終了が発表された。
 後継CPU 
ザイログ自身の開発による上位互換CPUを以下に示す。

 Z180
 日立が開発したHD64180ZについてザイログがセカンドソーサとなったZ64180の改良品。HD64180Z/Z64180とは仕様が微妙に異なる。Z80180やZ8S180がある。
 Z800
 Z80を16ビットCPUとして大幅に拡張するとともに周辺チップを集積したもの。命令体系拡張として、乗除算命令の追加、16ビットオペランド命令の増強、PC相対アドレッシングモードやSP相対アドレッシングモードの拡充などを行い、また従来隠し命令となっていたIX、IYレジスタを分割操作する命令などが公式にサポートされる。システムとしてはユーザーモード・スーパーパイザーモードの区別を持ち、内蔵MMUによるメモリ保護機能が提供される。256byteのRAMを内蔵し、ローカルメモリとして使用する他に、キャッシュとして使用することも可能である。外部バスは従来のZ80と互換性の高い8ビット幅のZ80-BUSと、16ビット幅のZ-BUSを選択することが可能で、またMMUの機能により512KBアドレス空間と16MBアドレス空間が選べる。このバスの種別とサポートするアドレス空間の種別により4つの製品 (Z8108,Z8116,Z8208,Z8216) が計画された。のちにC-MOS化されたZ280に引き継がれた。
 Z280
 あまり採用される事無く、消え去った。ほとんど生産されなかったZ800をCMOS化したもの。Z800のZ-BUSインターフェース・16MBアドレス空間サポート版であるZ8216の仕様をおおよそ引き継ぎ、起動時にコンフィギュレーションで他のバージョンの仕様もサポートする。
 Z380
 1993年2月5日に発表されたZ80互換の32ビットCPU。レジスタは従来の汎用レジスタに加えて16ビット追加部分を含めたグループが4バンク存在する。4GBのアドレス空間をリニアにアクセス可能。DRAMリフレッシュコントローラやINT0 - 3の割込みが追加されている。Z8000との互換性はない。
 eZ80
 3ステージ命令パイプラインを導入し、同一クロックのZ80に対して約3倍のパフォーマンスを持つ"eZ80 CPU User Manual"。最大クロックスピードは50MHz、アドレスレジスタを24ビットに拡張しており、16MByteアドレッシング可能。Rabbit 2000/3000/4000/5000と同じく現行商品である。
 Z80に類似のアーキテクチャー 
Z80のアーキテクチャー（プログラミングモデル・レジスタ構成等）を参考に、拡張を行ったアーキテクチャ等として、東芝のTLCS-90シリーズ、TLCS-900シリーズ、Rabbit2000シリーズがあるが、これらはZ80とのバイナリ互換性はない。
また、Z80より一部の機能や命令を削除したものとしてSHARPのLR35902がある。
これらZ80の技術が流用できるCPUを開発年順に記す。

LR35902
 Z80のセカンドソースメーカーであるシャープがゲームボーイ用に開発したZ80のカスタムCPUである。1989年4月21日に発売されたゲームボーイに採用されたCPUのクロック数は4.19MHz、ゲームボーイカラーは8.39MHzと高速である。厳密には Intel 8080 に、Z80の機能や命令の一部を追加した、両者の中間の様な仕様になっているが、 Custom Z80 とか GB Z80 といわれている。

 TLCS-90シリーズ。
 TMPZ84Cxxx系列の後に開発された Z80CPU の流れを汲むプロセッサー。但しバイナリコードは非互換になっている。IX, IYレジスタ幅が20bitに拡張されている、SP相対アドレッシングがある、ゼロページアドレッシングがある、PC相対分岐で64KBをカバーする、などの拡張が行われている。

 TLCS-870 シリーズ
 基本的なアーキテクチャーはZ80と全く同一といってよく、設計にはある種の影響を受けている。レジスタセットはZ80そのままであり、命令もほぼ同一である。

 TLCS-900シリーズ。
 TLCS-90の長所を引き出して16/32ビット化したアップコンパチのCPU。TLCS-90の上位互換性および使いやすさから，主に組み込みに使用されているCPU。TLCS-90に対してインデックスレジスタIZの追加、FレジスタをAレジスタとのペアから外して独立させ、代わりにWレジスタとペアにして16ビット幅のWAレジスタとするなどの変更を行っている。

Rabbit2000
 Rabbit 2000は一部の命令の追加と削除をして高速化したZ80である。米国が開発・販売している。Rabbit2000、Rabbit3000、Rabbit4000、Rabbit5000のバージョンがあり、初期のRabbit2000はビットマイクロプロッセッサであるが、上位モデルのRabbit4000/5000では32ビットとして動作する32ビットアーキテクチャーとなっている。 Rabbit2000/3000/4000/5000はHD64180/Z180のアーキテクチャーを基にしているが完全なバイナリ互換ではない（:en:Zilog Z80#DerivativesのPartly compatibleを参照）。eZ80と同じく現行商品である。

RL78
 国産ルネサスの8ビット/16ビットCPU。業界最高レベルの低消費電力を実現している。RL78低消費電力8/16ビットMCU 2024年8月22日RL78のマシン語は、ほぼZ80である。福野泰介の一日一創  2023年6月23日
 主な開発環境 
Z80は、8080とバイナリレベルで互換性があり、そのDOSであるCP/M、及びCP/M上で動作する各種のソフトウェアが利用可能である。以下はCP/M上の動作を前提に供給されたものの一部である。

 BASIC
 BASIC80
 アセンブラ

 MAC/RMAC
 C言語
 BDS-C
 LSI C-80
 Hitech-C
他にも各種雑誌で各機種用のアセンブラの掲載などもあった。
Oh!X誌には、システムに依存するツールのほかに、アセンブラやコンパイラなどの発表がされていた。
 日本国内での発音 
日本国内での発音のしかたはいくつかある。Zは日本語では（アメリカ式でもなく、イギリス式でもなく）日本式に「ゼット」と読むことが一般的。
 ゼット・ハチマルhttps://japan.zdnet.com/glossary/exp/Z80/
 自衛隊の装備品の型式の発音で「0」を「レイ」ではなく「マル」と読み、工業製品でもそれを模倣して同様の読み方を採用するものは多いので、これはこれで自然。
 ゼット・ハチジュウ
 日本の雑誌『トランジスタ技術』ではこの読み方が採用される。他の電子工作雑誌、マイコン雑誌などでもこの読み方が採用されることがある。
 ゼット・エイティー
 工学系の学会で使われることがある。最近のITのプロジェクトは海外の技術者との打ち合わせも多いので、特に海外の技術者との協同作業の経験が多い層に使われる。「ゼット・ハチマル」や「ゼット・ハチジュウ」では海外の技術者との打ち合わせに使えないので自然と英語に寄せて「ゼット・エイティー」に修正する。また、もともと海外の工学部や工学系の大学院で学んだ高学歴層も自然とこれを使う。
 ゼッパチ
 これは英語が読めない層、英語が嫌いな層や、アマチュア層が気に入り妙に固執する読み方。この呼び方にはかなり問題があり、ザイログにはZ8というマイクロコントローラがあり、大変紛らわしい。呼称がかぶる。

 脚注 

 注釈 

 出典 

 参考文献 




 関連項目 
 組み込みシステム
 外部リンク 

Category:マイクロプロセッサ
Category:MSX