1 ポイント 投稿者 GN⁺ 7 시간 전 | 1件のコメント | WhatsAppで共有
  • 1976年7月に発売された Zilog Z80 は、パーソナル/ホビー向けコンピュータから組み込み・産業機器まで広く使われ、8ビットマイクロプロセッサ時代を代表する存在となった
  • Intel 8080とのバイナリ互換性を維持しつつ、レジスタ、アドレッシング、命令、割り込み機能を拡張し、電気的接続はよりシンプルに設計された
  • 8008の制限のあるスタックと14ビットアドレス空間は、8080でメモリスタックと16ビットアドレス空間へ改善され、Z80はそこにインデックスレジスタ、代替レジスタバンク、ブロック命令を追加した
  • 単一5V電源・単一クロックと MREQ・IORQ・RD・WR 制御信号、内蔵DRAMリフレッシュにより、少ない周辺チップでコンピュータを構成できた
  • Z80ファミリはGame BoyのSharp LR35902やeZ80など多くの派生製品を生み、オリジナルのZ80は長い産業用途での寿命を経て 2024年6月に生産終了 となった

Datapoint 2200からIntel 8008へ

  • Computer Terminal Corporation(CTC)は、個別TTLチップで作られた8ビットプロセッサを搭載した Datapoint 2200 プログラマブル端末を開発した
  • TTL回路の一部をカスタムICに置き換える計画は、CPU全体を単一チップに収める方向へ拡大し、Texas InstrumentsとIntelがそれぞれ設計を担当した
  • 両社とも期限内に設計を完成できず、Intelのチップが準備できた時点でCTCはすでにTTLベースの端末を販売していた
    • CTCのエンジニアはチップ性能にも満足しておらず、次世代端末のアーキテクチャも変更済みだった
    • TIは設計を中止したが、Intelは当初 1201 だった製品をマーケティング名の 8008 に変更して商用化した

8008の構造と限界

  • 8008は A・B・C・D・E・H・L の7つのレジスタを提供する
    • Aはアキュムレータで、HとLはメモリポインタ HL を構成する
    • 擬似レジスタMは、HLが指すメモリバイトを表す
  • ALU状態はCarry・Parity・Zero・Signフラグとして保持され、条件付きジャンプ・呼び出し・復帰に使われる
  • プログラムカウンタは直接扱いにくく、関数呼び出しにはプロセッサ内部の 8段の復帰アドレススタック を使用した
    • Datapoint 2200がシリアルメモリを使う予定だったため、メモリベースの呼び出しスタックがボトルネックになり得るとの判断による設計だった
  • メモリアドレスは14ビットで、別アドレス空間に 32個のI/Oポート を提供する
  • 割り込みが発生すると、周辺機器がデータバスにRST命令を載せ、CPUがそれを実行する
    • RSTはアドレス空間先頭部の8つのスロットのいずれかを呼び出す
    • 汎用メモリスタックがなく、すべてのメモリアクセスにHLが必要なため、割り込み処理中にレジスタを保存するには、I/Oバス上の外部ラッチを一時レジスタとして使う必要があった
  • 3,500個のトランジスタ とDIP18パッケージを使用し、アドレスバスとデータバスを多重化していた
    • 外部回路がバスをラッチし、CPUの内部状態信号を解釈する必要があった
    • 500kHzの位相の異なる2つのクロックと、+5V・-9V電源が必要だった

8008から8080へ

  • 8008の開発が終わる前から限界を改善する議論は始まっていたが、Intel経営陣はまず市場の反応を確認しようとした
  • Federico Faggin は改良型の開発を推進したが、競合の8ビット製品発表まで待った結果、Intelは9か月の先行期間を失った
  • Fagginはプロジェクト承認前からBusicomの Masatoshi Shima を招聘し、8080設計に投入した
  • 潜在顧客が8008のデモで寄せた批判やフィードバックも反映し、初期段階から8008とのバイナリ互換性を放棄することを決めた

8080アーキテクチャ

  • 8080は8008と似たレジスタ構成を維持しつつ、内部の復帰アドレススタックをなくし、SPが指すメモリスタック を導入した
    • BC・DE・HL・AFレジスタペアをスタックにプッシュ/ポップできる
    • IntelアセンブリではAFをプログラムステータスワードである PSW と呼ぶ
  • アドレス空間は16ビットの 64KB、I/Oポートは256個に増えた
    • BCとDEによる限定的な間接アクセスが可能になった
    • アキュムレータとHLを、即値で指定したアドレスから読み出したり保存したりできる
  • レジスタペアのインクリメント/デクリメントなど16ビット演算が追加され、ポインタ計算と16ビットカウンタを扱えるようになった
    • この演算ブロックはALUフラグに影響しないため、BCをデクリメントしたあと2バイトがともに0かどうかを別途検査する必要がある
  • 割り込みはRSTベースの方式を維持しつつ、ソフトウェアで有効化・無効化できるようになった
    • 明示的なメモリスタックにより、レジスタ保存用のI/Oハードウェアは不要になった
  • Intel 8080アセンブリはニーモニックとopcodeがほぼ1対1で対応し、アセンブラ実装は容易だった が、人間が読むには不便なこともあった
    • レジスタペア命令は片方のレジスタ名だけを使い、INXのXで単一バイトのINCと区別する

8080の電気的インターフェース

  • 速度を高めるためNMOSロジックを使用し、-5V・+5V・+12V の3電源と位相の異なる2つのクロックが必要になった
  • 40ピンパッケージによりアドレス線とデータ線は分離されたが、制御状態の一部をデータバスに多重化していたため、外部ラッチとデコーダは依然として必要だった
  • Intelは状態デコードとクロック生成のためのサポートチップを販売し、システムによっては割り込みコントローラ、タイマ、DMAコントローラも必要だった
    • プログラマブルタイマは、少なくともDRAMリフレッシュの駆動に活用できた
  • 後継の 8085 は単一5V電源と単一5Vクロックを使い、一部の制御信号を追加したが、それでも専用サポートチップが必要だった

Zilog設立とZ80開発

  • 8080プロジェクトの承認遅延とIntel経営陣との対立に不満を感じたFagginは、マイクロプロセッサ部門責任者の Ralph Ungermann とともにIntelを離れ、会社を設立した
  • 当初はマイクロコントローラを検討したが、ファブレス半導体スタートアップが担うにはマージンが低いと判断した
  • その後、8080の改良型である Super 80 を設計することにし、この製品がZilog Z80へとつながった
    • Exxonから資金を確保し、ShimaもIntelから招聘した
    • レイアウトやソフトウェアシミュレーションなどを担当するチームは計11人に拡大した
  • 目標は8080とのバイナリ互換性を維持しながら、レジスタ、アドレッシング方式、命令を追加し、6800のような同時代プロセッサの特徴を取り入れることだった
    • 8080より高速で、電気的接続を単純にすることも目標とした
  • 動作する最初のプロトタイプまでに約 40万ドル がかかり、Exxonから確保した50万ドルの予算より少ない費用でスケジュールを満たした
  • 生産は当初契約したSynertekとの対立後、Mostek に依存した
    • その後Exxonの追加投資で自社ファブを建設したが、Z80の複数供給は継続した

Z80アーキテクチャの拡張

  • Z80は 8080命令セットと完全にバイナリ互換 である
  • 6800に着想を得た16ビットインデックスレジスタIXとIYを追加した
    • opcodeプレフィックスを使ってHLの代わりに使うことができ、即値オフセットもサポートする
  • AF・BC・DE・HLレジスタペアには代替バンクがあり、割り込み処理時に高速に切り替えられる
  • 割り込みは3つのモードを提供する
    • モード0は8080互換方式である
    • モード1は常に固定アドレスを呼び出す
    • モード2はバス上の値をインデックスとして使い、呼び出しテーブルへ分岐し、別レジスタがテーブルのメモリ基準アドレスを指定する
  • ビットの回転・検査・設定、BCD演算、BCをカウンタとして使う反復命令、ブロック転送・比較・文字列演算を追加した
    • バイトコピーのループ全体を、自己反復命令である LDIR 1つに置き換えられる
  • Intelがアセンブリニーモニックの著作権を主張したため、Z80は独自の構文を採用した
    • オペランドをより明示的に書き、基本ニーモニックをオーバーロードして、8080構文より読みやすく構成した

シンプルになったバス設計

  • Z80は 単一5V電源と単一クロック だけを必要とする
  • 8080で外部回路がラッチして解釈していた状態を、専用信号として直接提供する
    • MREQとIORQはメモリ/I/Oアクセスを区別する
    • RDとWRは読み出し/書き込みを表す
    • M1は現在のメモリアクセスが命令フェッチであることを知らせる
  • アドレス線とデータ線を直接接続し、74xx138を1つ使ってEEPROM・RAM・UARTを選択する程度の回路だけで、基本的なコンピュータを作れる
  • 内部リフレッシュカウンタが命令デコード周期中にアドレスバスへ値を出力し、制御線を有効にして DRAMリフレッシュ を処理する
  • 割り込みモード1を使えば、外部割り込みコントローラなしで単一デバイスを割り込みピンに接続できる
    • 複数デバイスは74xx148優先順位エンコーダとラッチのような単純な回路で処理できる

Z80以後の展開

  • Z80が1976年7月に発売される前から、16ビット Z8000 の初期設計が始まっており、製品はIntel 8086の後、Motorola 68000の前にあたる1979年に発売された
  • Z8000は8086のように分割メモリを使ったが、セグメント番号をバスに出力し、外部MMUが線形アドレス変換と範囲・権限チェックを担当した
  • 8086命令セットには8080の系譜とともに、Z80の自己反復ブロック・文字列・ループ命令の特徴も反映された
  • Z8000のMMU設計は、286の ディスクリプタテーブルベースの16ビット保護モード にも影響を与えた

Exxon、IBM PCとZilogの変化

  • Zilogは、マイクロプロセッサが論理回路の代替品と見なされていた時期からコンピュータ市場を狙っていたが、Exxonとの関係は、IBMがPCにZilogではなく Intel 8088 を選んだ理由の1つとなった
  • ExxonはIBMに対抗する独自のコンピューティング事業群を作ろうとし、タイプライター、ワードプロセッサ、プリンタメーカーなどに戦略的に投資した
    • その一部はZilog部品ベースの製品を設計し、IBM製品の市場シェアを侵食した
  • Exxonとの緊密な関係はFagginとUngermannの間にも対立を引き起こし、UngermannはZilogが1980年にExxonの完全子会社となる前に退社した
  • Zilogは1989年にExxonから再び分離され、1991年に上場した
    • その後、プライベートエクイティと電子企業の間で何度も所有者が変わり、現在は Littelfuse が所有している
  • Z80は長期間にわたり組み込みプロセッサとして使われた後、2024年6月に生産終了 となった

個人的なZ80体験と長期的影響

  • Z80とバイナリ互換の8080・8085は、8ビットマイクロコンピュータの事実上のハードウェア標準形成に貢献し、CP/MとMicrosoft BASIC が事実上のソフトウェア標準として定着する基盤となった
  • Z80は初期のパーソナルコンピュータ、家庭用・ホビー向けコンピュータ、さまざまな組み込み・産業システムに使われた
    • 初代Game Boyの Sharp LR35902 をはじめ、クローンや派生アーキテクチャも登場した
    • Zilogは16・32ビット派生製品群を断念した後、パイプラインと高クロックを採用した eZ80 など、Z80ベースのマイクロコントローラへ回帰した
  • 10代後半、電子部品カタログでまだ販売されていたZ80を見つけて小型コンピュータを設計し、夜に学校の写真室を借りてPCBをエッチングした
    • 教師たちから、古い家庭用コンピュータやコンソール、Tupperwareの箱の中にワイヤラッピングで作られCP/M・WordStarを実行したコンピュータなどの体験を聞いた
    • MCS-85部品とZ80・8085・6502・6522チップも譲り受け、自作プロジェクトに使った
  • この過程で、安定したパワーオンリセットは予想以上に難しいこと、リンカはアセンブラよりはるかに実装が難しいこと、個人でもコンパイラを実際に作れることを学んだ

1件のコメント

 
GN⁺ 7 시간 전
Hacker News のコメント
  • 1978年にアセンブリ言語でプログラミングを始め、ソフトウェアだけでなくハードウェアの動作原理も知りたかった。
    Z80キットを組み立てたあと、ロジックプローブとオシロスコープでデジタル電子工学を学び、マニュアルを読み込んで命令セットを覚えた。今ではもう70歳近いが昨日のことのように鮮明で、Z80は本当に素晴らしいCPUだった。

    • 3年後に6809ベースの4KB Radio Shackコンピュータで始めた。40年以上6809のコードを書いていないのに、今でもいくつかのオペコードを覚えていて、最近 retrocomputing.stackexchange.com の難しいアセンブリ言語バグの解決を手伝った。
      授業も本もなしにROMを逆アセンブルし、Motorolaのサマリーカードを参照しながら独学したが、その後いくつものスタートアップを創業し、成功したキャリアを築いた。コンピュータを最下層の第一原理から学ぶことには、今なお代替できない価値がある。
    • Turing Complete(https://turingcomplete.game/)をおすすめする。
      NANDゲートで基本回路を作り、機能ユニットと命令デコーダを組み合わせてチューリング完全なアーキテクチャを構築し、自分で定義したアセンブリ言語でプログラミングするデジタル論理シミュレーションゲーム。新しいオペコードが必要なら自分で実装でき、難しいが大きなやりがいがある。正式リリースが近づいており、予告編も公開されている。
    • Z80と6502はいずれも企業内部で却下された設計から生まれた。今ははるかに複雑になったが、また別の設計者が FORK86-64 のようなものを出してくるところを見てみたい。
    • 私もZX81用の外部周辺機器まで自作した。
  • 12歳のとき、テレビ番組「Klein Microcomputer Sebstgebaut und Programmiert」のキットでZ80コンピュータを組み立てた。
    Märklinの変圧器を電源に、Telefunkenのテープレコーダーをデータ保存装置として使い、月着陸船ゲームをZ80機械語で入力したあと、プログラムを失うのが怖くて2週間電源を切らなかった。

  • ZX Spectrumの1980年代に戻ったような感じで、当時128KB RAMは手の届かないぜいたく品だった。今とも少し似ている。
    https://spectrumcomputing.co.uk/entry/2000237/Book/Mastering...
    http://www.primrosebank.net/computers/zxspectrum/docs/Comple...

  • ZX-81のユーザーマニュアル末尾にあるZ80命令リファレンス表を見て、何も理解できなかった記憶がある。BASICのような高水準の抽象化とは違い、CPUが実際にプログラムを実行する仕組みを把握するまでかなり時間がかかった。

    • 12歳のときは、むしろBASICの単純な構造のおかげでZ80アセンブリ言語を理解しやすかった。メモリアドレスは行番号、レジスタは変数、JPGOTOCALLGOSUBCPIFJP ZTHEN GOTOLDLET に対応していた。
    • 初めて買ったコンピュータがキット版のZX-81で、小さな町で情報技術の先駆者になった。すべてが複雑でありながら単純だった時代で、RAM 1KBだけでフライトシミュレータも動いた。
    • ZX-81で初めてコンピュータに触れ、高速モードで画面を消す方式と、ハードウェアとソフトウェアの間の興味深いトレードオフに魅了された。
  • 「Z80は8080命令セットと完全にバイナリ互換である」という表現は、フラグレジスタまで考慮すると正しくない。一部の演算でパリティフラグの動作が異なっていた。
    また、8080の未定義オペコードを利用したプログラムは任意の方法で実行され得たが、Z80はそのオペコードを新しい命令に再利用した。

    • パリティフラグを完全互換にしなかったのは賢明な選択だった。既存のプログラムはそれをほとんど検査しておらず、Z80で動作が異なる命令の後では事実上まったく検査していなかった。
      そのおかげでパリティフラグをオーバーフローフラグとして再利用でき、これは非常に有用な拡張だった。Datapoint 2200、Intel 8008、Intel 8080、RISC-Vは、ハードウェアがオーバーフローを検出しない珍しい命令セットだが、単純で安価な初期設計とは違ってRISC-Vには言い訳の余地がなく、これが最大の失敗だと思う。
    • 未定義命令は8080命令セットの一部ではないため、それをサポートすることは命令セットではなく8080シリコンとのバイナリ互換性に当たる。ただしパリティフラグの違いは実際の互換性を壊すので、「パリティフラグの値を除き、8080命令セットのみに依存するコードとバイナリ互換である」が正確だ。
  • 1983年初め、TRS-80 Model IでZ80アセンブリ言語によるプログラミングに入門した。Bill Bardenの本と、80 Micro誌に載っていたHardin Brothersの連載「The Next Step」が道を開いてくれ、その当時の経験をこの記事にまとめた。

    • 1980年ごろ10代だったとき、近所のRadio Shackで買える範囲で本を買って読んでいた。TRS-80がZ80を使っていたので、Howard Samsが出版したBill BardenのZ80本にも触れた。
      子どもにも理解できるほど明快で最初から最後まで読んだ。実際にZ80を触ったことはなかったが、6502や8051・PICのような初期のマイクロコントローラも難なく理解する土台になった。今でも現代のマイクロプロセッサをZ80になぞらえて理解しているように思うし、普通の人が全体を把握できるほど単純な8ビットマイクロプロセッサの学習をおすすめする。
  • 高級言語コンパイラは高価で、シェアウェアも今日のオープンソースほど簡単には手に入らなかった時代にZ80で始めた。マシンに何をさせているのかを理解するには、誰でもアセンブリ言語を少しは学ぶべきで、Z80は推論するのに十分単純だった。

  • 35年前は、プログラムを手でアセンブルして16進の機械語をボードに入力しなければならなかった。それを楽にするために自分でアセンブラを書き、その経験が開発ツール分野を経て主要なC++コンパイラの作業につながった。

    • 1980年代には、私を含め多くの人がZ80命令の16進コードを記号式アセンブリ言語と同じくらい簡単に読むことができた。Microsoft CP/M BASICインタプリタやFORTRANコンパイラをリバースエンジニアリングするときに非常に役立った。
    • そうした作業は1970年代後半の話のように聞こえるが、実際には1991年だった。プログラムがその瞬間ごとに正確に何をしているか分かるのは素晴らしかったが、複雑なものを実装するにはかなりの苦行だった。
    • アセンブリ言語を、CPUが理解する唯一の言語である機械語へ手作業で変換したということだ。
  • 今も米国の学生数百万人が使っており、BASICでプログラミングできるTI-84電卓が抜けている。白黒モデルはZ80、カラー画面モデルはeZ80を使っている。

    • 欧州でも高校がTI-84 Plusの購入を指定していたし、今も店頭で販売されているところを見ると使われ続けているようだ。
      友人たちとTI-BASICで小さなプログラムを作って見せ合い、多くの時間を過ごしたが、Z80アセンブリ言語までは学べなかった。TI-84 Plus用のZ80アセンブリ言語マニュアルを全部印刷して読み始めたが、まだ1行も書けていない。
    • TI-84+ は、いちばん好きなレトロコンピュータの一つかもしれない。
    • 私のはTI-83で、そんな高度な機能はなかった。