MC68000

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の平均性能は約1MIPS弱でした。典型的なプログラムでは、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年には、モトローラ日立製作所がピン配置互換のHCMOS版68HC000をリリースしました。68HC000は、電力消費が低減され、クロック周波数も8MHzから20MHzまで向上しました。

セカンドソース


HMOS版の68000は、日立、Mostek、ロックウェル、シグネティックス、Thomson/SGS-Thomson、東芝などのセカンドソース企業によって製造されました。東芝CMOS版の68HC000のセカンドソースでもありました。

マイクロコントローラへの展開


68000は、多くのマイクロコントローラや組み込み用プロセッサのベースにもなりました。モトローラは、68000CPUコアを使用した最初のマイクロコントローラである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月号」

脚注



* 注記

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。