MC68000(エムシーろくまんはっせん)とは
MC68000は、
モトローラ(現NXPセミコンダクターズ)が開発した
マイクロプロセッサ(MPU)です。通称68Kと呼ばれ、その後の同アーキテクチャのシリーズは680x0と総称されます。
モトローラは周辺LSIを含めたものをM68000ファミリと呼んでいました。
歴史
開発の背景
1976年に始まったMACSSプロジェクトから誕生しました。従来の製品との
互換性を切り捨て、新たなアーキテクチャを導入する賭けに出ました。結果として6800系の周辺デバイスとの
互換性は確保されたものの、6800のコードは実行できませんでした。
しかし、その後の拡張性には最大限の注意が払われ、一度68000に移行すれば、将来的な
互換性が保証されるように設計されました。例えば、
CPUのレジスタは
32ビット幅でしたが、外部バスはアドレスバスが
24ビット幅、データバスは
16ビット幅に設計されました。
開発チームは、
ミニコンピュータのPDP-11や
VAXに影響を受け、命令セットは
ハードウェアの制約よりも
ソフトウェア開発の観点から設計されました。これにより、
ミニコンピュータでの開発経験がある技術者にとって使いやすいものとなりました。
名称の由来
"68000"という名称は、6800との連続性を想起させるために選ばれましたが、設計上の類似点はほとんどありません。集積された
トランジスタ数が68,000個だったという説もありますが、実際には70,000個近くありました。
当時の競争環境
当時、
8ビットから
16ビットへの移行期で、熾烈な競争が繰り広げられていました。
ナショナル セミコンダクターや
テキサス・インスツルメンツもプロセッサをリリースしましたが、性能面で課題がありました。
インテルも8086をリリースしましたが、
モトローラは68000をより完全な
16ビット設計と位置づけました。そのため、68000は
ハードウェアとして複雑になりました。
性能
68000の単純な命令は4クロックサイクルで実行できましたが、複雑な命令には時間がかかりました。8MHzの68000の平均性能は約1
MIPS弱でした。典型的なプログラムでは、68000のコードは
インテルのプロセッサよりも一命令あたりにできることが多く、コードサイズを小さくできました。
他のプロセッサとの比較
8086が8080との
互換性を重視した結果、汎用レジスタの不足や実行速度の低下に苦しんだのに対し、68000は十分な数のレジスタと先進的な内部設計により、実行速度で優位に立ちました。また、
24ビットのリニアアドレッシングにより最大16MBの連続メモリ空間をサポートし、任意のアドレスへのダイレクトアクセスが可能でした。
一方、8086はセグメント方式という複雑なアドレス方式を採用しており、64KBを超えるデータやコードの扱いが煩雑でした。この点でも68000は優位性がありました。このため、68000は学習しやすく使いやすいと開発者に好まれました。
製造とバリエーション
オリジナルのMC68000は、3.5μmルールのHMOSプロセスで製造され、
1979年末に技術サンプルが出荷されました。量産チップは
1980年に出荷され、当初のクロック周波数は4, 6, 8MHzでした。その後、10MHz版や12.5MHz版が登場しました。
メモリ量の少ないシステム向けに、1982年には
8ビットデータバス版のMC68008が登場しました。また、
1985年には、
モトローラと
日立製作所がピン配置互換のH
CMOS版68HC000をリリースしました。68HC000は、電力消費が低減され、クロック周波数も8MHzから20MHzまで向上しました。
HMOS版の68000は、日立、Mostek、ロックウェル、シグネティックス、Thomson/SGS-Thomson、
東芝などの
セカンドソース企業によって製造されました。
東芝は
CMOS版の68HC000の
セカンドソースでもありました。
68000は、多くの
マイクロコントローラや組み込み用プロセッサのベースにもなりました。
モトローラは、68000
CPUコアを使用した最初の
マイクロコントローラであるMC68302通信プロセッサをリリースし、後にプロセッサ部分だけを抜き出したMC68EC000をリリースしました。
生産終了とその後
モトローラは
1996年にHMOS版のMC68000とMC68008の製造を終了しましたが、
スピンオフした
フリースケール・セミコンダクタは、現在もMC68HC000、MC68HC001、MC68EC000、MC68SEC000を製造販売しています。
後継プロセッサ
MC68020以降は、外部データバス、アドレスバス共に
32ビットになり、
コプロセッサがサポートされました。
ソフトウェア的には、アドレッシングモードが拡張され、ユーザーモードではほぼMC68000との上位
互換性がありました。一部
互換性のない部分は、割り込みでトラップ処理することで吸収できました。
利用例
68000は、
1980年代前半には比較的高価なシステムに使われました。
マルチユーザー型の
パーソナルコンピュータや、
ワークステーションに採用されました。
UNIXシステムでは、プロセッサのメモリアドレッシング上限やMMUの制限から、68000自体は長く使われませんでしたが、後継品種は
1980年代を通して
UNIX市場で広く使われました。
1983年からは、
パーソナルコンピュータ、特に
ホビーパソコンで使われるようになりました。
AppleのLisaやMacintosh、コモドール
Amiga、アタリ
Atari ST、
シャープX68000などで
1990年代中盤まで使われました。MC68008は、シンクレアQLなどで使われました。
コントローラ
68000は、コントローラ用としても成功しました。レーザー
プリンターのコントローラとして広く使われ、
1980年代を通してレーザー
プリンターで使用され、
1990年代に入ってもローエンドの
プリンターに使われ続けました。
工業制御システム
工業制御システムの分野でも成功を収めました。
プログラマブルロジックコントローラ(PLC)で使われ、製品寿命が長く20年前のものでも使い続けることが多かったため、21世紀になっても68000ベースのコントローラが数多く使われています。
ゲーム機
コンピュータゲームメーカーは、
アーケードゲームや家庭用ゲーム機に68000を採用しました。
アーケードゲームでは1983年にアタリの「Food Fight」で初めて使われ、日本ではナムコの「
リブルラブル」が初でした。
1980年代後半から
1990年代初めごろまで、
アーケードゲーム基板ではメイン
CPUとしてよく使われました。家庭用ゲーム機では、
メガドライブや
ネオジオなどで使用されました。
サウンドカード
PC向けサウンドカード用のMIDI
シンセサイザー・ドーターボードでも、制御用として68000が搭載されるケースが
1990年代中盤には多数見られました。
組み込み用途
68000は、スタンドアローンのコンピュータ市場では使われなくなると、一般消費者向けの各種機器の組み込み用途に使われるようになりました。
テキサス・インスツルメンツは、グラフ表示
電卓のTI-89やTI-92で68000を使用しました。
その他
CPU32とColdFireプロセッサは、自動車のエンジン制御や医療機器分野でも使用されました。低電圧版のDragonBallは、Palm PilotシリーズなどのPDAで使われました。高速
シリアルポートを内蔵した派生品は、通信機器に使用されました。
アーキテクチャ
概要
32ビットのデータレジスタとアドレスレジスタを8本ずつ持つ、CISCアーキテクチャの
マイクロプロセッサです。
8ビットのMC6800シリーズとは
互換性がありません。DECの
VAXを参考にしたと言われる、直交性の高い命令体系を持ちます。
バス幅
外部バス幅はアドレスバス
24ビット、データバス
16ビットで、当初のクロック周波数は4-16MHzでした。約68,000個の
トランジスタからなるN-MOS
集積回路で、当初は64ピンDIPパッケージで供給されました。データバスはダイナミックバスサイジングを採用し、
8ビットまたは
16ビットのバスにアクセス可能でした。
内部構造
MC68000自体は
16ビットCPUとして取り扱われましたが、内部アーキテクチャは
32ビットプロセッサとして設計されており、レジスタとアドレスのデータ長は
32ビットでした。
32ビットのアドレス空間は4GBに相当しますが、当時の技術ではフルに使う可能性がないとされ、外部アドレスバスとのデータ入出力では上位
8ビットをマスクして下位
24ビットを使用し、最大16MB分のメモリ領域を管理しました。
メモリマップドI/O
x86系プロセッサとは異なり、メモリ空間内にI/O用領域を割り当てるメモリマップドI/O方式を採用していました。
ファンクションコード
MC68000シリーズのアドレス空間は、FC0-FC2ピンのデコードにより、スーパーバイザ・プログラムアドレス空間、ユーザー・プログラムアドレス空間、スーパーバイザ・データアドレス空間、ユーザー・データアドレス空間に分離されました。しかし、それぞれの空間を通信する機能が不十分だったため、実際には1つの
32ビットアドレス空間として扱われることがほとんどでした。
ハーバードアーキテクチャ
MC68000シリーズでは、プログラムアドレス空間とデータアドレス空間を分離するハーバードアーキテクチャを採用していました。しかし、メモリ管理の複雑化から、分離しない設計がほとんどでした。
OS用とアプリケーション用の2つの
スタックを持ち、特権モードとユーザーモードの2つの特権レベルを持っています。これにより、高度なメモリ管理機能やマルチタスク機能を備えたOSを搭載することを前提に設計されました。
メモリアドレッシング
MC68000は、
16ビットのALUを持つ一方で、アドレスは常に
32ビットで扱われました。実効アドレスの演算には専用の
16ビットALUを2個使用しました。8086がセグメント方式という制約のあるアドレス空間だったのに対し、MC68000はフラットな
32ビットアドレス空間を持ち、アドレス演算専用のALUを持つことで、効率的なアドレス操作を可能にしました。
内部レジスタ
8本の汎用データレジスタ(D0-D7)と8本のアドレスレジスタ(A0-A7)を持ちます。アドレスレジスタA7は
スタックポインタ(SP)として使用されます。多バイトデータの配置はビッグ
エンディアンです。
ステータスレジスタ
演算結果を反映するステータスレジスタを持ちます。ステータスレジスタのビットには、ゼロ(Z)、キャリー(C)、オーバーフロー(V)、拡張(X)、ネガティブ(N)があります。
命令セット
命令は、操作とアドレッシングモードに分けられ、直交性が高い設計です。
オペコードは、
CPU設計者が自由に埋めることができるように工夫されています。命令サイズは
16ビット以上で、アドレッシングモードによっては追加のワードが必要になります。命令の多くは、入力(ソース)と出力(デスティネーション)を持ち、デスティネーションに変更を加えます。
特権レベル
2段階の特権レベル(ユーザモードとスーパーバイザモード)を実装しています。割り込みが発生すると、スーパーバイザモードに移行します。
割り込み
8つの割り込みレベルを持ち、優先順位が決まっています。割り込みレベルはステータスレジスタに格納され、ユーザープログラムからも見えるようになっています。
ハードウェア割り込みは3本の信号線によって
CPUに伝えられます。
例外処理
例外テーブル(割り込みベクターテーブル)はアドレス0番地から固定で配置され、256個の
32ビットアドレスを表します。
MC68000は、外部支援なしにはデマンドページングの実現が困難でしたが、バスアクセス中にピンをアサートして命令実行をフリーズさせる機能(リランサイクル)を利用し、別のプロセッサでページ処理を行うことで実現が可能でした。この問題は後のMC68010で解決されました。
アドレッシングモード
基本的なアドレッシングモードとして、レジスタ直接、レジスタ間接、インデックス付レジスタ間接、プログラムカウンタ相対、絶対アドレス指定、イミディエート値があります。
命令のサフィックス
多くの命令には、処理単位を指定するサフィックス(.b, .w, .l)が付いています。
M68000ファミリ
メインプロセッサ
以下のようなメインプロセッサが存在します。
MC68000
MC68EC000
MC68008
MC68010
MC68012
MC68020
MC68030
MC68EC030
MC68040
MC68LC040
MC68EC040
MC68040V
MC68060
MC68EC060
MC68LC060
SCC68070
周辺LSI
多数の周辺LSIが存在します。
後継製品
CPU16
TMP68301
TMP68303
MC68302
MC68306
MC68307
MC68322
MC68328
CPU32 MCU
ColdFire
BUFFEE Accelerator
参考文献
「ASCII 1983年5月号」
脚注
* 注記