MC68000
歴史

68000 は1976年に開始された MACSS (Motorola Advanced Computer System on Silicon) プロジェクトから出てきたものである。従来製品との互換性を考慮するような妥協したアーキテクチャにはしないということが開発の初期に決定されていた。これは、利用者がその新システムを一から新たに学ぶ必要があることを意味しており、一種の賭けだった。最終的に、6800系の周辺デバイスとのインタフェースの互換性だけは持つこととなったが、6800のコードは実行できないものとなった。しかし、その後の拡張における互換性には最大限の注意が払われ、68000に乗り換えさえすれば今後が保証されるようにした。例えば、CPUのレジスタは32ビット幅とされたが、外部バスはより小さく設計され、アドレスバスは24ビット幅であり、データバスは16ビット幅となっている。ちなみに、アドレスバスとデータバスはマルチプレクスされておらず分離されている。MACSSチームはPDP-11やVAXシステムのようなミニコンピュータのプロセッサに影響を受けた。命令セットはハードウェアの制限よりもソフトウェア開発の観点で設計された。そこにはミニコンピュータでの開発になれた技術者がプログラミングしやすいものにしようとの考えがあった。
"68000" という名称は6800との連続性を想起させるよう選択されたが、これらの間に設計上の類似点はあまりない。集積されたトランジスタ数が68,000だったからとも言われているが、実際には70,000に近かった。
当時、8ビットから16ビットへの移行で熾烈な競争が繰り広げられていた。ナショナル セミコンダクターは1973年から1975年にかけてIMP-16とPACEというプロセッサで一歩先んじたが、使用したプロセス技術が原因で、性能に問題を抱えていた。次にテキサス・インスツルメンツがTMS9900をリリースしたが、広く使われるには至らなかった。そして1977年にインテルが8086をリリースした。しかし、モトローラのマーケティング部門は68000をより完全な16ビット設計にすることが重要と考えた。このため、68000はハードウェアとしては複雑なものとなった。複雑さの指標としてトランジスタ数を見ると、8086は29000個であり、68000は前述のように70000近い。
68000の単純な命令は4クロックサイクルで実行できたが、複雑な命令の実行にはもっと時間がかかった。8MHzの68000で、平均性能は約1MIPS弱だった。
典型的なプログラムで平均をとると、68000のコードはインテルのプロセッサよりも一命令あたりにできることが多く、コードのサイズが小さくて済んだ。また、8086が、8080との互換性を重視した結果、汎用レジスタの不足や実行速度の低下に苦しんだ事に対して、十分な数のレジスタと、当時としては先進的な内部設計のため、実行速度の面では8086に対して優位に立っていた。さらに68000は24ビットリニアアドレッシングによって最大16MBの連続するメモリ空間をサポートし、この空間内の任意のアドレスへのダイレクトアクセスを可能としている。これは開発当時としては非常に広大なメモリ空間だった。これに対し8086は従来の8080との間でソフトウェアのアセンブリ言語レベル（注: バイナリレベルではない）での互換性のため、従来と同じ16ビットのアドレッシングを「オフセット」とし、「セグメント」と称する（詳細はセグメント方式#x86を参照）16ビットレジスタの値を4ビットシフトしてベースアドレスとする、20ビット空間のノンリニアアドレッシングだった。そのため、64Kバイトを超えるデータやコードを扱うにはセグメントレジスタの値を適宜変更する必要があり、面倒であった。32ビットアドレッシングは、x86では1986年の80386で初めて可能になった。
このような事情から68000は8086と比較して学習が容易で使いやすく、開発者に好まれた。
オリジナルのMC68000は、3.5μmルールのHMOSプロセスで製造された。技術サンプルは1979年末に出荷された。量産チップは1980年に出荷され、当初のクロック周波数は4, 6, 8MHzだった。10MHz版は1981年、12.5MHz版が1982年に登場している。HMOSでは最高速の16.67MHz版 (12F) は1980年代終盤まで生産されなかった。
メモリ量の少ないシステム向けの低価格版として1982年に MC68008 が登場した。これは MC68000 の8ビットデータバス版であり、アドレスバスも当初は24ビットよりも縮小され、48ピンDIP版は20ビット。後の52ピンPLCCパッケージ版では22ビットである。MC68012 は後に31ビットアドレスバスで登場した。
68HC000はモトローラと日立製作所が1985年にリリースしたオリジナルとピン配置互換のHCMOS版である。モトローラのものは MC68HC000、日立のものはHD68HC000と呼ばれた。68HC000では8MHzから20MHzまでのクロック周波数が可能となった。またCMOS化されただけでオリジナルと機能が全く変わらず、かつ電力消費が低減されている。オリジナル版は25℃の環境で約1.35ワットを消費した（クロック周波数に依存しない）。一方、MC68HC000は8MHzで0.13ワット、20MHzで0.38ワットしか消費しない。なお、CMOSとは異なり、HMOS回路の電力消費はスイッチング時も何もしていないときも一定である。従って、クロック周波数が違っても電力消費はほとんど変化しない。ただし、周囲の気温には影響される。
モトローラは1990年、MC68HC001をリリースした。このチップは68HC000と仕様がほぼ共通であるが、データバスに16ビット幅と8ビット幅の2つのモードが用意されており、リセット時のピンへの入力でモード選択が行えるようになっていた。従って、このチップは68008の代替として 8ビットメモリを使った安価なシステムで利用できた。
HMOS版の68000はいくつかのセカンドソース企業で製造された。日立 (HD68000)、Mostek (MK68000)、ロックウェル (R68000)、シグネティックス (SCN68000)、Thomson/SGS-Thomson (EF68000, TS68000)、東芝 (1988年発売。TMP68000を含めたTLCS-68000ファミリー) などである。東芝はCMOS版の68HC000のセカンドソースでもあった (TMP68HC000)。また、後にシグネティックスがアーキテクチャ互換のSCC68070を製造した。 SCC68070は現在フィリップスが版権を持つ。
68000は数々のマイクロコントローラや組み込み用プロセッサのベースにもなった。1989年、モトローラはMC68302通信プロセッサをリリースした。これが68000CPUコアを使用した最初のマイクロコントローラだった。このコアはCMOS版の68HC000をベースとしているが、8ビットの6800周辺チップとのインタフェース機能が省略されている。1991年、モトローラはここからプロセッサ部分だけを抜き出したMC68EC000をリリースした。
モトローラは68EC000コアを使ったいくつかのマイクロコントローラを開発した。MC68306とMC68307は汎用マイクロコントローラ、MC68322 "Bandit" はプリンターコントローラ、MC68356はモデム用、MC68328 DragonBallは携帯機器向けだった。他のマイクロコントローラとして683XXファミリーは、より強力なCPU32プロセッサコアを使っていた。
68EC000ベースの683XXマイクロコントローラの一部にはスタティック版の68EC000コアが使われた。この場合クロックを遅くしたり停止させたりして電力消費を抑えることができる。1996年、モトローラはこのスタティックコアをプロセッサとして独立させ、MC68SEC000としてリリースした。
モトローラは1996年、HMOS版MC68000とMC68008の製造を終了した。生産終了の予告は1994年末ごろなされた。モトローラの通常の手順からいけば、1995年まで注文を受け付け、最後の出荷は1996年になったということになる。その後スピンオフしたフリースケール・セミコンダクタは現在もMC68HC000、MC68HC001、MC68EC000、MC68SEC000を製造販売し続けている。また、MC68302やMC68306マイクロコントローラやその後のDragonBallファミリーも生産し続けている。68000のアーキテクチャを受け継いだ680x0、CPU32、ColdFireも生産されている。
後継のMC68020からは外部データバス、アドレスバス共に32ビットの、名実共に32ビットのCPUとなり、コプロセッサがサポートされた。ソフトウェア的には、アドレッシングモードが拡張されたほか、ユーザーモードではほぼMC68000の上位互換だった。一部互換性のない部分は、存在しない命令を実行しようとしたときに割り込みでトラップ処理することで、ソフト的に吸収することができた。このMC68020や、後継のMC68030は数多くのワークステーションで採用された。
なおRISCであるPowerPCシリーズとの互換性はなく、同プロセッサを搭載したMacintoshではMC68LC040をエミュレーションしている。
RISC技術を採用したColdFireシリーズは、68000から使用頻度の低い命令の多くを削除した下位互換の組み込み用プロセッサである。