MC68020(エムシー ロクハチゼロニゼロ)は、1984年にモトローラが開発した32ビットマイクロプロセッサ。68000、68010の後継であり、その系統は後に68030に受け継がれた。低価格版の68EC020もある。

## 解説

従来の同系統のプロセッサはデータバス16ビットでアドレスバス23ビットだったのに対して、68020はアドレスバスもデータバスもプロセッサ内外含めて完全に32ビット化されていた。新たなパッケージング技法により、従来のDIPに対してサイズを大きくすることなく多くのピンを出力できるようになっている。68EC020はアドレスバスを24ビットにしてコストを低減させている。68020は12MHzから33MHzの速度の製品が出荷された。

### 68010からの改良点

68020は、演算論理ユニットALUと外部データバスと外部アドレスバスの32ビット化、新たな命令とアドレッシングモードの追加、プリフェッチの強化など、68010に様々な改良を施している。また3ステージのパイプラインを導入。それによってより高いクロック周波数が実現でき、命令の実行速度が向上した。68010には「ループモード」があり小さなループを小さな命令キャッシュの保持して高速化することができたが、あまり効果はなかった。68020ではそれを普通の256バイトの命令キャッシュに置き換え、68kシリーズで初めてキャッシュメモリを内蔵することとなった。

68000と68010では、ワード(16ビット)とロングワード(32ビット)がワード境界(アドレスが偶数の位置)にあるときのみ、ワードまたはロングワードとしてアクセスできるという制限があった。68020ではこのデータ配置制限も取り除かれた。ただし整列されていないロングワードへのアクセスは、整列されたロングワードへのアクセスよりも遅い。

リアルタイムオペレーティングシステムを考慮し、従来のユーザーモード/スーパーバイザモードそれぞれのスタックポインタに加えて、割り込み用スタックポインタが追加された。割り込みの受け入れとその処理を分離できるようになり、従来のように割り込み処理中に処理を完結させる必要性が軽減された。

### コプロセッササポート

MC68020 には、新たにコプロセッサインターフェースが搭載された。これにより、最大8個のコプロセッサを接続できる。メインCPUは「Fライン命令」(オペコードの先頭4ビットが全て1の命令)を認識すると、特別なバスサイクルでコプロセッサとやり取りし、その命令をコプロセッサに実行させる。コプロセッサとしては、メモリ管理ユニット(MMU)MC68841/MC68851 や浮動小数点数演算装置 (FPU)MC68881/MC68882 が用意された。MMUはCPU1つに対して1つだけ接続可能。FPUは原理的には複数個接続可能だが、通常は1つだけ接続した。コプロセッサとの接続は非同期バスで行われるため、メインプロセッサと同じ周波数のコプロセッサでなくても動作した。

### マルチプロセッシング機能

マルチプロセッシングは、RMCピンで外部にリード・モディファイ・ライトサイクル実行中であることを示す信号を供給することで実装されている。他のプロセッサはその間メモリアクセスを控える。ソフトウェアサポートとしては、TAS命令、CAS命令、CAS2命令などがある。

マルチプロセッサシステムでは、CPU間でコプロセッサを共有できない。コプロセッサからの復帰、バスエラーやアドレスエラー例外からの復帰に関わる問題を防ぐため、一般にマルチプロセッサシステム内の全CPUが同一モデルでなければならず、全FPUも同一モデルでなければならない。

### 命令セット

新たな命令としては、スーパーバイザモードについてのいくつかの改善と拡張、マルチプロセッシングシステムのソフトウェア制御のためのいくつかの命令(68060では削除された)、高級言語サポートのためのいくつかの命令(あまり使われず、以降の68kプロセッサでは削除された)、32ビット整数同士の掛け算(結果は64ビット)、64ビット数値を32ビット数値で割る割り算(結果は32ビットの商と余り)、ビットフィールド操作命令がある。

68000にも「スーパーバイザモード」があったが、特権モードで保護しなければならない 'MOVE from SR' という命令が非特権モードで実行可能だったためPopekとGoldbergの仮想化要件を満たしていなかった。68010以降、これが特権保護されるようになり、仮想化ソフトウェアをサポートしやすくなった。

なお、F(1111)ラインエミュレータにおいて、メモリを参照するオペコードを実行した場合、メモリーへの投機実行が行われる。この為、1111ラインエミュレータにシステムコールを配置したOS(例えばシャープ/ハドソン Human68kのVer.2.0以前)では予期せぬメモリアクセスによってバスエラーが発生するという問題が生じた。この問題はA(1010)ラインエミュレータでは発生しない。

### アドレッシングモード

新しいアドレッシングモードとしては新たな間接モードが既存のモードに追加され、インデックスの使い方が柔軟になった。
あまり触れられることはないが、これらの新しいアドレッシングモードによって68020はページプリンティングに最適となり、90年代初頭の多くのレーザープリンターが68EC020コアを使用した。

68020の命令バッファ(命令キャッシュ)は256バイトで、1エントリ4バイトの64エントリがダイレクトマップで配置された。小さなキャッシュではあるが、アプリケーションの性能向上に大変効果があった。またそれによってバストラフィックが低減され、特にDMAを多用するシステムに有利となった。

## 使用例

コモドールのAmiga、Appleの Macintosh II と Macintosh LC といったパーソナルコンピュータだけでなく、サン・マイクロシステムズのSun-3ワークステーション、ヒューレット・パッカードのネットワークアナライザーなどにも使われた。
アーケードゲームとしてはナムコSYSTEM22、SYSTEM22SUPERへの使用が確認されている。
フランスのTGVでは、線路を通して列車に送られる信号のデコードにこのプロセッサを使用していた。戦闘機ユーロファイター タイフーンの操縦制御システムでも使われている。

派生品

68EC020 はモトローラが発売したマイクロプロセッサである。68020の低価格版であり、アドレスバスを24ビットに縮小してあるため、最大16MBのメモリしかアクセスできない。

コモドールのコンピュータ Amiga 1200 とゲーム機 Amiga CD32 が68EC020を採用していた。アーケードゲーム用基板コナミSYSTEM-GX、タイトーF3システム もこのプロセッサを使用している。レーザープリンターにも使われており、QMS PS 410、アップルはLaserWriter II NTXとLaserWriter II NTX-J、コダックは Ektaplus 7016PS、データプロダクツは LZR 1260 に採用していた。

## 技術データ

|  |  |
| --- | --- |
| 正式名称 | MC68020 |
| 動作周波数 | 12.5 , 16.67 , 20 , 25 , 33 MHz(最低周波数は 8 MHz。クロックは外部から供給) |
| 供給電圧 | 5 V |
| 最大消費電力 | 1.75 W |
| 製造プロセス | HCMOS, 3/8" シリコンピース |
| パッケージ | PGA 169(114ピンを使用) 34.16 x 34.16 mm(ヒートシンク無で 53 °C/W) |
| アドレスバス | 32ビット(4GBのフラットなアドレス空間に直接アクセス可能) |
| データバス | 32ビット |
| 命令セット | 101命令 CISC |
| キャッシュ | 256バイト 命令キャッシュ |
| レジスタ | - アドレスレジスタ7本(32ビット) - データレジスタ8本(32ビット) |
| トランジスタ数 | ~200 000 |
| 性能 | 10 MIPS @ 33MHz |