Z80
別名:ザイログZ80
【英】Zilog Z80
Z80とは、Zilogが開発および製造を手がけ、1976年に発表した8ビットマイクロプロセッサ(8ビットCPU)のことである。
Z80は、マイクロプロセッサとして当時主流だったIntel 8080(i8080)の上位互換チップとして開発された。
Z80は、1980年代まで広く8ビットパーソナルコンピュータのCPUとして用いられた他、多くの互換製品や派生製品が作られ、2010年11月現在でもなお、組み込み機器の用途において各種機器に搭載されている。
参照リンク
Welcome to Zilog - (英語)
| AMD: | Thoroughbred x86アーキテクチャー |
| CISC: | 68系 Z80 |
| CPU: | ASMP Apple A4 A5チップ |
Z80
(Zilog_Z80 から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/10/21 04:49 UTC 版)
|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 (2018年7月)
|
Z80は、ザイログによって設計され1976年に発表された8ビットマイクロプロセッサである。現在も広く使われている。
概要
嶋正利らインテルを退社したIntel 8080の開発スタッフが設計を行ったマイクロプロセッサである。#歴史
8080とはバイナリレベルで「ほぼ」上位互換性があり、多くのソフトウェアがそのまま動作し、その上、8080よりも性能が良くなっている。 ザイログオリジナルの製品としてクロック周波数が2.5MHzのZ80から20MHzの高速版まで存在する。
当初から、安定供給のためにMostekによるセカンドソース品が並行的に供給され、そのほか互換品を製造するメーカーも増えた。
Z80は "8080よりも高速・高性能な8080互換CPU"として高評価となり採用機が続出、S-100バス互換機ののCPUにこぞって搭載されるなど、マイクロコンピュータ(パーソナルコンピュータの初期段階)の市場を支配した。日本国内においても、1970年代の末から80年代前半頃にかけてビジネス用のオフィスコンピュータやホビーパソコンで採用された。1980年代の中頃までは、パーソナルコンピュータを中心にしつつも幅広い用途を支えてきた。その後、特にセカンドソースメーカーから周辺デバイスを集積した製品も開発され、使いやすくなり、ますますパーソナルコンピュータ以外での使用が増えていった。
- 組み込み用途
組み込み用では、初期のゲーム専用機などにも搭載されていた。[注釈 1] 組み込み用途などでは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の生産を終了することを発表した[1]が、流通在庫もあり、オリジナル品もしばらく入手できる模様。なお、互換品、ライセンス品の製造が続いているので、Z80は使い続けることができる。
- Z80の読み方
Z80の本国アメリカでの発音はズィー・エイティー(Z-Eighty)。アメリカの技術者のほぼ全員がこう発音する。技術カンファレンスや動画、講義、解説記事でもこの読み方が圧倒的多数。アメリカの"技術者でない一般人"の発音は、(彼らはZ80の存在や名前を知らず、初見で発音することになるが)やはりほぼ間違いなくズィー・エイティーと発音する。稀にジィー・エイト・オー(Zee Eight Oh)と読む人も稀にいるが、アメリカでは少数派。
イギリスやカナダなどイギリス英語圏では、「Z」は「ゼッド(Zed)」と発音されるため、英国では「Z80」は 「ゼッド・エイティー(Zed Eighty)」 と発音される。
日本での発音のしかたはいくつかある。
- ゼット・ハチジュウ - 日本で最も一般的で広く浸透している読み方。技術者の講演・書籍・解説動画でも多く使われる。特に 電子工作雑誌、マイコン雑誌など(例:『トランジスタ技術』など)ではこの読み方が主流。 Zを(アメリカ式でもなく、イギリス式でもなく)日本式に「ゼット」と読み、日本語の数字の読みを添えている自然な読み方。
- ゼット・エイティー - 英語発音を意識した読み方。発音を英語に近づけたい層が使う。上の発音をする人々に比べればかなり少数派。学会や国際系の発表・教育現場、または英語教材系の文脈で稀に使われる。
- ゼット・ハチマル[2] - 自衛隊の装備品の型式の発音で「0」を「レイ」ではなく「マル」と読み[注釈 2]、工業製品でもそれを模倣して同様の読み方を採用するものは多いので、これはこれで自然。
- ゼッパチ - この呼び方にはかなり問題があり、同社にZ8というマイクロコントローラがあり、大変紛らわしい。呼称がかぶる。Z8をゼッパチと呼べなくなってしまう。
ハードウェア
Z80はインテルの 8080マイロプロセッサの改良型といえる製品であり、他のインテル系CPUと同じくリトルエンディアンである。8080に対して若干の拡張、電源の 5V単一化、より高いクロック周波数への対応などが図られた。メモリ空間は16ビット幅のアドレスバスで示される64KiBで、それ以上のメモリ空間を操作する場合には、外部にバンク切り替え回路やMMUなどを追加する必要がある。
当初のZ80には存在しなかった区分ではあるが、現在のZ80はCMOS版とNMOS版に区分されている。NMOS版は低価格、高性能、CMOS版は高性能、低消費電力設計である。NMOS版の最大動作クロック周波数は品番の末尾のサフィックス(アルファベット)の有無と種類で識別できる。Z80が2.5MHz版、Z80Aが4MHz版、Z80Bが6MHz版、Z80E[注釈 3]若しくはZ80Hが8MHz版[3]など。トランジスタ数は8,200個。CMOS版ではZ84C0006が6.17MHz、Z84C0008が8MHz、Z84C0010が10MHz、Z84C0020が20MHz動作となっている。Z80H(40ピンDIPプラスチックパッケージ)の価格は1982年当時1000個ロット時で19.95ドルであった[3]。Z80Hに対応するZ8500周辺ファミリーがサポートされ、Z8530シリアル・コミュニケーション・コントローラ、Z8531非同期シリアル・コミュニケーション・コントローラ、Z8536カウンタ/タイマ・パラレルI/Oユニット、Z8538バスコントロールI/Oインターフェイス、Z8060 FIFOエキスパンダー、Z8516 ダイレクト・メモリ・アクセス・ユニットなどがある[3]。
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版には通常のリセットの他に、特別なリセット(スペシャルリセット)が存在し、ザイログに在籍していた嶋正利、フェデリコ・ファジン、ラルフ・アンガーマンの3氏による米国特許4486827[4]として1984年12月4日に成立している。スペシャルリセットは通常のリセット同様、リセット入力ピンを利用するが、通常リセットより短いリセットパルス幅(2クロック以内)が与えられる必要がある。スペシャルリセットが有効になるとPC(プログラムカウンタ)のみがリセットされ、他のレジスタは一切変わらない。特許や他のリソース[5]に示されているスペシャルリセットの応用はエミュレータやマルチタスキング等である。
製造には、この頃使われ始めたイオン打ち込み技術が使用された。当時、互換品の製造にあたりライセンス契約を結んでセカンドソースとなったり、クリーンルーム設計による独立実装によるのではなく、チップの顕微鏡写真からマスクを起こしてデッドコピーを行う一部の日本企業があったため、イオン打ち込み技術はその対策のためにも使われた。イオン打ち込みにより、エンハンスメント(ノーマリーオフ)に見えるが実はディプリーション(ノーマリーオン)というトランジスタを6個ほど仕組み、Z-80のオリジナルチップから素直にマスクパターンをデッドコピーすると正しく動作しなくなるようにして時間稼ぎをした[6]。
特徴
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デバイスに対応することが可能となっている[7]。
これは同じ命令を実行しても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品ではこの命令を実行中に割り込みがかかった場合、元の割り込み状態に関わらず割り込み禁止になる場合がある[8]。このバグ(エラッタ)は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には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)のアクセスにこの仕様を使用している[9]。
しかし、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小さい値が出力されることに留意する必要がある。なお、入力の場合はアドレス出力が先である。
歴史
初期の経緯
フェアチャイルドセミコンダクターおよびその後のインテルにおいて、物理学者であり技術者でもあったフェデリコ・ファジンは、基本的なトランジスタおよび半導体製造技術の開発に従事していた。また彼は、インテルにおけるメモリおよびマイクロプロセッサ設計の基本的な手法を構築し、Intel 4004、Intel 8080のほか、いくつかのIC開発も主導した。嶋正利は、4004および8080の主要な論理設計およびトランジスタレベルの設計者であり、その際の監督はファジンで、一方、カスタム集積回路設計の責任者はラルフ・アンガーマン(en:Ralph Ungermann)であった[10]。
1974年初頭、インテルはマイクロプロセッサを単体で販売する製品というよりも、主力製品であるスタティックRAMおよびROMの販売促進手段として位置付けていた。組織再編により、以前は独立していた部門の一部がレス・ヴァダス(en:Leslie L. Vadász)の指揮下に置かれたことで、マイクロプロセッサの社内での位置づけがさらに弱まった。この年、1973年から1975年にかけての不況(en:1973–1975 recession)が最悪の状況に達し、インテルは数名の従業員を解雇した[10]。このような状況に置かれた結果、ファジンは不満を募らせ、アンガーマンを誘って酒を飲みに行き、独立して会社を起こすことに興味があるか尋ねた。アンガーマンは即座に同意し、当時インテルでの業務が減っていたこともあり、1974年8月または9月に退職した。ファジンもそれに続き、彼のインテルでの最終出勤日は1974年のハロウィンであった[11]。嶋正利はその話を聞いて新会社への参加を申し出たが、当時はまだ製品設計も資金もなかったため、しばらく待つように伝えられた[12]。
設立されつつあったがまだ社名もないこの会社は、まずシングルチップ・マイクロコントローラ(名称は2001)の設計に着手した。彼らはSynertek社(英語版)と会合を持ち、その製造ラインでの生産について協議したが、ファジンがコスト構造を把握するにつれ、自社製造ラインを持つインテルのような企業の製品との競争では、2001のような低価格製品では勝負にならないと明らかとなった。そこで彼らは、より複雑なマイクロプロセッサ(当初の名は "Super 80")の設計に方向転換し、新設計に取り掛かった。この設計の主な特徴は、8080のような従来の−5V、+5V、12Vではなく、+5Vバスのみを使用することであった[12]。この新設計は8080との互換性を持たせつつ、Motorola 6800のいくつかの機能、たとえばインデックスレジスタや改良された割り込み処理機能などを追加することを意図していた[13]。
エクソンからの出資と本格的な開発の開始
まだ会社設立の途中だったのに、業界誌 Electronic News (英語版)が このカンパニー(まだ、"人の集まり"にすぎない状態)の存在を聞きつけ、その物語を記事にした。これがエクソンのハイテク投資部門であるExxon Enterprisesの目に留まった。当時、不況の影響でベンチャーキャピタルは非常に限られており、1975年全体で業界全体への投資総額は1,000万ドルに過ぎなかった[注釈 4]。エクソンの何者かが、まだ社名すらつけられていなかったこのカンパニー[注釈 5]に連絡を取り、会合が設けられた。その結果、1975年6月に初期投資として50万ドル[注釈 6]が提供された[14]。
出資交渉と設計作業が進む中、嶋正利は1975年2月にこの新会社に加わった[13]。嶋はすぐに高水準な設計に取り掛かり、自身のアイデアも多数取り入れた。特にNECのミニコンピュータでの経験を活かし、2セットのレジスタを設けて割り込みに即応できるようにするという概念を導入した[11][注釈 7]。アンガーマンは、この設計を補完する一連のコントローラおよび周辺ICの開発に着手した[15]。
この時期に嶋正利は、論理設計をリアルタイムで物理設計に落とし込む能力を持つ人物、という伝説的な評判で知られるようになった。新機能について議論している最中に、彼がその実装に必要なチップ上の面積を即座に割り出し、設計が大きすぎると判断すれば即座に却下することもあった[16]。設計の初稿は1975年4月までに完成し、嶋は5月初頭には論理レイアウトを完了させた。論理設計の第2版は8月7日に発行され、バスの詳細設計は9月16日までに完成した。テープアウトは11月に完了し、テープから製造用マスクへの変換にはさらに2か月を要した[17]。
ファジンはこの時点ですでに製造パートナーを探し始めていた。SynertekおよびMostekの両社は、設計に対応可能なデプレッションモードの製造ラインを整備していた。以前から接触のあったSynertekにまず交渉を持ちかけたが、同社の社長は「セカンドソースライセンス」、すなわち設計を自社製品として販売する権利を要求してきた。ファジンは、これでは自社で製造ラインを整備しても競争にならないと考え、この交渉は決裂した。次に彼はMostekと交渉し、Zilogが自社ラインを整備するまでの間の独占製造契約を締結し、その後セカンドソースライセンスを供与することで合意した[18]。
新会社の名称についてさまざまな候補が検討されたが、いずれも翌日に思い出すこともできないくらい、記憶に残らないものばかりであった。ある日、ファジンとアンガーマンが integrated logic(集積ロジック)という用語をもとにした名称案を考えていたとき、アンガーマンが「Zilogはどうか?」と提案した。ファジンは即座に同意し、その名なら「集積ロジックの最終到達点」という意味になりうる、と述べた。翌日再び会った際、両者ともその名前を即座に思い出したことから、正式に「Zilog」という社名が決定した[19]。[注釈 8]
生産体制の確立
Mostekからの最初のサンプルは1976年3月9日に納品された[15]。同月末には、アセンブラベースの開発システムも完成していた。この時点でZ80の周辺ICの一部が開発中であり、翌年にかけていくつかの製品が市場に投入された。これには、Z80 CTC(カウンタ/タイマ)、Z80 DMA(ダイレクトメモリアクセス)、Z80 DART(デュアル非同期受信送信器)、Z80 SIO(同期通信コントローラ)、Z80 PIO(パラレル入出力)が含まれる。
Z80は1976年7月に正式に発表された[20]。当時、半導体業界では外国メーカーによるチップ設計の無許可複製に対する懸念があった。Zilogの設計チームはリバースエンジニアリングを妨害するため、見た目とは異なる動作をする6つの "トラップ" トランジスタを設計に組み込んだ。嶋正利によれば、NECの技術者は、このトラップにより解析が6か月遅れた、と述べたという[21]。NECはその後、Zilogとの特許侵害訴訟で和解し、Z80およびその他のチップの正規ライセンスを取得した[22]。
Z80の成功を受けて、ファジンとアンガーマンは半導体製造工場の設立に向けてエクソンに追加出資を求めた。エクソンはこれに同意し、Zilogは自社製造ラインを確立した。これにより、ZilogはZ80の総市場の60~70パーセントを獲得することに成功したと推定される[23]。一方、Mostekは正式なライセンスのもと、Z80の互換製品MK3880の製造を許可され、顧客にとってのセカンドソースとなった。インテルとは異なり、当時のスタートアップ企業にとっては、事業継続や供給保証の観点からセカンドソース契約が不可欠と考えられていた[注釈 9][13]。[24]
様々なZ80
Z80は一番古い2MHzのZ80に始まりクロックアップされた物や機能追加された物がザイログより発売されている。それらザイログのZ80の主な物のメーカーの型番と機能を記載する。
-
- Z0840004PSC
- DIP-40(600mil)、NMOS 4MHz
-
- Z84C006PSC
- Z80CPU 6MHz
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のうち、ザイログ以外の会社で開発された上位互換性を持つものを示す。高速化を図ったものや、周辺デバイスを集積したものである。
- 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倍のパフォーマンスを持つ[25]。最大クロックスピードは50MHz、アドレスレジスタを24ビットに拡張しており、16MByteアドレッシング可能。Rabbit 2000/3000/4000/5000と同じく現行商品である。
Z80に類似のアーキテクチャー
Z-80のアーキテクチャー(プログラミングモデル・レジスタ構成等)を参考に、拡張を行ったアーキテクチャ等として、東芝のTLCS-90シリーズ、TLCS-900シリーズ、Rabbit2000シリーズがあるが、これらはZ-80とのバイナリ互換性はない。 また、Z-80より一部の機能や命令を削除したものとして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と同じく現行商品である。
主な開発環境
Z80は、8080とバイナリレベルで互換性があり、そのDOSであるCP/M、及びCP/M上で動作する各種のソフトウェアが利用可能である。以下はCP/M上の動作を前提に供給されたものの一部である。
参考文献
- 嶋, 正利『マイクロコンピュータの誕生:わが青春の4004』岩波書店、1987年8月。ISBN 400006021X。
- 「ASCII 1982年12月号」第6巻第12号、株式会社アスキー出版、1982年12月1日。
- ^ Zilog Calls Time on the Venerable Z80, Discontinues the Standalone Z84C00 CPU Family (huckster.io)
- ^ “Insider's Computer Dictionary:Z80 とは? - @IT”. atmarkit.itmedia.co.jp. 2021年8月31日閲覧。
- ^ a b c ASCII 1982年12月号, p. 75.
- ^ https://patents.google.com/patent/US4486827
- ^ http://www.primrosebank.net/computers/z80/z80_special_reset.htm
- ^ 嶋正利『マイクロコンピュータの誕生』p. 142
- ^ “Z80 CPU User Manual”. zilog.com. p. 11 (2016年). 2020年12月8日閲覧。
- ^ “Z80・割り込みフラグの不具合に関するレポート Z80のIFF2に関するトラブル体験談”. 下間 憲行 (1997年6月17日). 2018年1月16日閲覧。
- ^ 「MZ-1500 オーナーズマニュアル」(付属説明書)に具体的な記述あり。
- ^ a b Faggin, Shima & Ungermann 2007, p. 1.
- ^ a b Faggin, Shima & Ungermann 2007, p. 2.
- ^ a b Faggin, Shima & Ungermann 2007, p. 3.
- ^ a b c Faggin, Shima & Ungermann 2007, p. 4.
- ^ Faggin, Shima & Ungermann 2007, p. 8.
- ^ a b Faggin, Shima & Ungermann 2007, p. 5.
- ^ Faggin, Shima & Ungermann 2007, p. 19.
- ^ Faggin, Shima & Ungermann 2007, p. 6.
- ^ Faggin, Shima & Ungermann 2007, p. 7.
- ^ Faggin, Shima & Ungermann 2007, p. 17.
- ^ Anderson (1994), p. 51.
- ^ Faggin, Shima & Ungermann 2007, p. 13.
- ^ Holder, Keith (16 February 1984). [[1](https://archive.org/details/ComputerWeeklySupplement1984UKEnglish/Feb%2016%201984%2C%20Computer%20Weekly%20Supplement%2C%20%23898%2C%20UK%20%28en%29/page/n4/mode/1up) “Exxon and Zilog settle with NEC”]. Computer Weekly: 9 2025年6月15日閲覧。.
- ^ Faggin, Shima & Ungermann 2007, p. 9.
- ^ The Seybold report on professional computing. Seybold Publications. (1983). "In the 8-bit world, the two most popular microcomputers are the Z80 and 6502 computer chips."
- ^ "eZ80 CPU User Manual"
- ^ RL78低消費電力8/16ビットMCU[3] 2024年8月22日
- ^ 福野泰介の一日一創 [4] 2023年6月23日
- Anderson, A. John (1994). Foundations of computer technology (1st ed.). London: Chapman & Hall. ISBN 0-412-59810-8
- Ciarcia, Steve (1981). [[5](https://archive.org/details/BuildYourOwnZ80ComputerSteveCiarcia) Build Your Own Z80 Computer – Design Guidelines and Application Notes] (1st ed.). Byte Books. ISBN 978-0-07-010962-9
- Faggin, Federico; Peuto, Bernard; Shima, Masatoshi; Ungermann, Ralph (27 April 2007). “Oral History Panel on the Development and Promotion of the Zilog Z8000 Microprocessor” (PDF) (Interview).
脚注
注釈
- ^ パチンコ・パチスロの抽選を司る主基板部分のコアCPUには暗号機能を付与したZ80ベースのカスタムLSIが使われており、消費量の多い分野の一つとなっていた。このLSIはCPUとメモリの間で交換するデータを暗号化し、プローブを当ててもプログラムやデータが読み取れない様にしている。
- ^ 0,1,2...をマル、ヒト、フタ...と発音する。聞き間違い防止のため。
- ^ シャープLH0080/AにHがついたものは、DIPパッケージで使用温度範囲を拡大したものである。
- ^ 当時の金額。現在の貨幣価値に換算するとはるかに大きい。$57を考慮。
- ^ 翻訳に関する注。英語の company(カンパニー)は、元来は"仲間"、"仲間たち" という意味。現在でも、日常的にはその意味がメインの意味。英語話者にとっては、仲間("目的"など、ともかく何かを共有している人ら)が集まっていれば、その状態がすでにcompanyである。近世、(17世紀の東インド会社出現あたりから)株式会社という概念やそれに関する法律が人類社会であらたに整備され、カンパニー(人の集まり)を株式会社として登録することも可能になった。英語話者にとって、カンパニー(仲間ら)は、子供も大人も数人集まって作ったり解散することが自由で、当然ながら、基本的に法人登録の義務は全く無いが、もし若干の体裁や書式をととのえて法人登記すれば日本語で言う会社になることも可能、という概念構造になっている。
そして、この文章で「まだ社名も無かった」と書いてあるということは、米国の法人登録もしておらず、"仲間が集まった状態"にすぎなかった、ということを意味する。 - ^ 当時の金額。現在の貨幣価値に換算するとはるかに大きい。2.82023
- ^ これは当時のミニコンピュータに共通する特徴であり、初期のマイクロプロセッサにも広く取り入れられた機能である
- ^ アルファベットは、最初はA、最後はZなので、製品名に"Z"を入れて、"究極の製品"と示唆する命名法は広く行われている。たとえばオートバイの車種名でも "○○○○○-Z"のような命名法は頻繁に使われている。
- ^ Zilogは長年にわたりZ80を含む製品群を自社製造していたが、後に製造設備を売却し、現在のファブレス企業となっている
出典
関連項目
外部リンク
- Zilog_Z80のページへのリンク