MC68000
デマンドページングでは、実行中の命令のメモリアクセスがページフォールトを起こしたら、(それが正常なアクセスであれば)その実行中の命令の実行を一旦フリーズし、外部記憶と主記憶の間でスワッピングをおこなってから、実行中だった命令の実行から再開する、という処理が必要である。
しかし、MC68000がページフォールトの際に保存する内部情報は、「実行中だった命令の実行からの再開」ができないものであった。このため、MC68000の通常の割り込みの処理に従ってしまうと、デマンドページングは実現できない。これを、単にそもそもサポートするつもりが無かったものとみるむきもあれば、「仕様のバグ」とみるむきもあれば、後述のようにして実現が可能であるし、MMUも計画中に過ぎなかったのだから「将来仮想記憶をシリコン上に実装することを正当化する需要が発生するまでの暫定的な実装仕様」だったと考えるほうが自然である、とみるむきもある。
そのようなMC68000で仮想記憶を実装するためには、MC68000には次のような機能があった。バスアクセス中にあるピンをアサートすることにより、命令の実行をそこで一旦フリーズし、スリーステートバスをハイインピーダンスにして解放させたままいつまででも止めておいて、そののち、元の命令の中断したバスアクセスから再実行(re-run)する機能である。これによるバスサイクルをリランサイクル(rerun cycle)という。
これを利用して、メインのCPUであるMC68000を止めた状態で、別のプロセッサでページ処理をおこなうようにして、デマンドページングを実装できる。必然性はないが、同じバスに接続する容易性から、この補助プロセッサにもMC68000が使われることが多い。
以上のようなMC68000のデュアル・プロセッサによる仮想記憶を実現したコンピュータとしてはアポロコンピュータのDomainが有名である。同社の実装ではページスワップを担うスレーブ・プロセッサは、通常時はグラフィックス・プロセッサとして動作し、必要に応じてマスターのページ・スワップ要求に応じた。
この問題は後のMC68010で解決された。MC68010では、バスエラーとアドレスエラーが発生した場合、エラーを発生させた元の命令を指すプログラムカウンタのアドレスをスーパバイザスタックに保存することにより、元の処理に復帰できるようになった。
基本的なアドレッシングモードは以下の通りである。
データレジスタ、例 "D0"
アドレスレジスタ、例 "A6"
単純アドレス、例 (A0)
ポストインクリメント付アドレス、例 (A0)+
プレデクリメント付アドレス -(A0)
16ビット符号付オフセット、例 16(A0)
実際のインクリメントやデクリメントのサイズはオペランドの指定によって変わる。バイトリード命令ではインクリメントすると、アドレスに1を加算し、ワード(16ビット)では2を、ロング(32ビット)では4を加算する。
8ビット符号付オフセット、例 8(A0, D0) または 8(A0, A1)
16ビット符号付オフセット、例 16(PC). このモードは非常に便利
インデックス付8ビット符号付オフセット、例 8(PC, D2)
"$4000"のような数値や、アセンブラが翻訳するシンボリックな名前。
68000のアセンブリ言語では16進数を表すのに "0x" ではなく "$" を使うものが多い。
命令内に埋め込み、例 "#400".
追加:ステータスレジスタへのアクセス。後のモデルでは他の特殊レジスタも同様。
多くの命令にはドットに続くサフィックスが付き、処理単位を8ビット (".b")、 16ビット (".w")、32ビット (".l") で指定する。
多くの命令は入力(ソース)と出力(デスティネーション)を持ち、デスティネーションに変更を加える。主な命令は以下の通りである。
算術演算:ADD, SUB, MULU(符号なし掛け算), MULS(符号あり掛け算), DIVU, DIVS, NEG(否定加算), CMP(減算の一種だが、ステータスビットにのみ結果を反映し、実際の減算結果は格納しない)
二進化十進演算:ABCD, SBCD
論理演算:EOR(排他的論理和), AND, NOT(論理否定)
シフト演算:
論理シフト、つまり右シフトで最上位ビットをゼロにする: LSL, LSR
算術シフト、つまり最上位ビットを符号拡張する: ASR, ASL
ローテート、eXtendを使う命令と使わない命令: ROXL, ROXR, ROL, ROR
メモリ内のビット操作:BSET(1にする), BCLR(0にする), and BTST(SRのZeroビットをセット)
マルチプロセッサ制御:TAS(テストアンドセット、1命令でビットテストのためのリードとその結果のライトの2つのメモリアクセスを割り込みなどで中断されない不可分なバスサイクルで行うことによりメモリ共有型マルチプロセッサでのセマフォを実現)
フロー制御:JMP(ジャンプ), JSR(サブルーチンコール), BSR(相対アドレスでのサブルーチンコール), RTS(サブルーチンからの復帰), RTE(例外や割り込みからの復帰), TRAP(ソフトウェア割り込みに似たソフトウェア例外を発生), CHK(条件付きソフトウェア割り込み)
分岐:Bcc("cc"は分岐条件として16種類のステータスレジスタのチェック方法を記述:equal(等しい), greater than(大きい), less-than(小さい), carry, これらの組み合わせや論理否定)
デクリメント付き分岐:DBcc("cc"は分岐命令と同じ意味)指定したデータレジスタをデクリメントした後、指定された条件が真で、デクリメント結果が-1でないなら分岐する。0ではなく-1でチェックするのは、ループを記述する場合にコードを単純化するためである。ループカウンタとして最初から0が指定された場合、デクリメントされて-1になるので分岐しない。したがって0かどうかをループに入る前にチェックする必要がない。
MC68000 - サン・マイクロシステムズの初代UNIXワークステーションであるSun-1や、初期のMacintoshなどに採用された。日本ではシャープ X68000シリーズ、SEGA メガドライブ、SNK ネオジオなどに採用された。
MC68EC000 - 8ビットデータバスとして使用できるローコスト版。各種機器制御用の組み込みMPUとして使用されたほか、セガサターンではサウンド制御用MPUとして搭載された。
MC68008 - データバスを8ビット、アドレスバスを20ビットに縮小、安価な48ピンパッケージに収めた縮小版の68000MPUである。
MC68010 - MC68000に仮想記憶および仮想機械を実現するための機構を追加した。3ワード分のキャッシュを持ち、MC68000に較べ、DBcc命令等を高速に実行可能だった。サン・マイクロシステムズのUNIXワークステーションであるSun-2や日立 2050(初代)に搭載された。
MC68012 - 外部アドレスバス31ビット。
MC68020 - 外部アドレスバス32ビット、データバス32ビットと、名実ともに32ビット化。命令キャッシュ256バイトを追加。コプロセッサの接続も可能になった。 Sun-3、Macintosh II、Amiga 1200、日立 2050/32などに搭載。
MC68030 - MC68851相当のMMU内蔵、命令キャッシュのほかにデータキャッシュ256バイトを追加。Sun3/80、ソニー NEWS、Next Cube(初代)、Macintosh IIx以降、Amiga 3000、日立 2050/32Eなどに搭載。
MC68EC030 - MMU 無し。シャープ X68030に搭載。
MC68040 - MMU、MC68882相当のFPU内蔵(一部命令はソフトウェアエミュレート)、各キャッシュを4Kバイトに増加、命令の高速化、マルチプロセッサのサポート。NeXTcube、Macintosh Quadra・Centris、Amiga 4000などに搭載。なお、68040はXC68040(ソフトで言うベータ版)チップがそのまま量産されており、いわゆるエラッタが解消したMC68040はほとんど流通していない。
MC68LC040 - FPU無し。Macintosh LC475・575等、Appleの廉価モデルなどに搭載。
MC68EC040 - FPU無し。MMU無し。
MC68040V - 低電圧動作 (3.3V) 版。
MC68060 - 68040とピン互換、内部2逓倍、ワイヤードロジック化に伴い、一部の命令が削除された。しかしサン・マイクロシステムズはSPARC、MacintoshはPowerPC、他はMIPSなどに移行したためワークステーション・PCではほとんど採用されず。AmigaやX680x0ではアクセラレータとして使われた。
SCC68070 - シグネティックスが、CD-iのために製造した組み込み用の互換MPU。
MC68MH360FE - MC68360(CPU32+ベース)+SCC (Serial Communications controllers)
MC68120 - IPC (Intelligent Peripheral Controller with mask ROM)
MC68121 - IPC (Intelligent Peripheral Controller w/o mask ROM)
MC68122 - CTC(クラスタ ターミナル コントローラ)
MC68150 - DBS (Dynamic Bus Sizer)
MC68153 - Bus Interrupter
MC68160 - EEST (Ethernet Driver)
MC68184 - BIC (Broadband Interface Controller)
MC68185 - Twisted Pair Modem
MC68194 - Carrier band Modem for IEEE 802.4
MC68195 - Local Talk Adapter
MC68230 - PI/T (Parallel Interface & Timer) パラレルインターフェイス&タイマ
MC68338 - MAC (Media Access Controller)
MC68339 - FSI (FDDI System Interface)
MC68341 - 浮動小数点ROM
MC68356 - SPCE (Signal Processing Communication Engine)
MC68360 - QUICC ( Quad Integrated Communication Controller)
SCC68430 - DMAC (1ch Direct Memory Access Controller)
MC68440 - DMAC (2ch Direct Memory Access Controller)
HD68450 - DMAC (4ch Direct Memory Access Controller)
MC68451 - MMU (Memory Management Unit)
MC68452 - Bus Arbiter
MC68453 - Bubble Memory Controller バブルメモリコントローラ
HD63463 - HDC (Hard Disk Controller) ハードディスクコントローラ
HD63484 - ACRTC (Advanced Cathode Ray Tube Controller)
MC68488 - GPIBA (GP-IB Adapter)
R68C552 - DACIA (Dual Asynchronous Communication Interface Adapter)
R68560 - MPCC ( Multi Protocol Communication Controller)
HD68562 - DUSCC (Dual Universal Serial Communication Controller)
MK68564 - UART
MC68605 - X.25 Protocol Controller
MC68606 - X.25 Multi-Link LAPD Protocol
SCN68652 - MPCC (Multi-protocol Communication Controller)
MC68661 - UART
MC68681 - DUART (Dual Universal Asynchronous Receiver/Transmitter)
SCC68692 - 68681 Compatible CMOS
R68802 - LNET (Local Network Controller)
MC68824 - TBC (Token Bus Controller)
MC68834 - Stream Cipher Chip
MC68836 - FCG (FDDI Clock Generator)
MC68837 - ELM (Elasticity Buffer and Link management)
MC68838 - MAC (Media Access Controller)
MC68839 - FSI (FDDI System Interface)
MC68840 - Integrated FDDI
MC68847 - quad ELM
MC68848 - CAMEL
MC68851 - PMMU (32bit Page Memeoy Management Unit)
MC68881 - FPU (Floating-Point Unit) 浮動小数点演算ユニット
MC68882 - FPU (Floating-Point Unit) 浮動小数点演算ユニット(改良版)
MC68901 - MFP (Multi Function Peripheral) 多機能周辺コントローラ
TMP68301 - 68HC000 + UART etc(東芝製)
TMP68303 - 68HC000 + UART + PI/T(東芝製)
MC68302 - 68EC000 + SCC(高機能通信コントローラ)、DMA、Timer他。ISDN等の通信機器に使われた。
MC68306 - 68EC000 + DUART
MC68307 - 68EC000 + UART
MC68322 (BANDIT) - 68EC000 +
MC68328 (DragonBall) - 68EC000 + LCDコントローラ、UART、SPI、PWM、Timer、RTC他。Palm (PDA) に使われた。
CPU32 MCU
MC68330 - CPU32
MC68331 - CPU32 + GPT (Timer),QSM(キュー付シリアルモジュール)
MC68332 - CPU32 + TPU(高機能なタイマ/カウンタ),QSM,SIM(システム統合モジュール)
MC68334 - モジュラプロセッサ - CPU32 + TPU,SIM, 8/10ビットADコンバータ(変換速度は8ビット時8ms、10ビット時9ms)
MC68340 - CPU32 + DMA,DUART,Timer
MC68341 - CPU32 + タイマ,2チャネルDMA,2チャネルSIO(シリアルIO),SIM41(システム統合モジュール)、CD-Iエンジン向けプロセッサ、データバス16ビット、アドレスバス32ビット
MC68356 - MC68302のスーパーセット(統合マルチプロトコル・プロセッサ) - 68EC000 + RISCプロセッサ(CP:通信プロセッサとして利用) + DSP56002, SIB(システム統合ブロック), PCMCIAサポート, 16550UARTエミュレーション
MC68360 (QUICC) - CPU32+(CPU32上位互換) + CPM(高機能通信コントローラ),DMA,Timer
ColdFire - M68Kシリーズから派生したRISCプロセッサ。命令セットは68000から一部削除されソースコードレベルでサブセットとなっている。
MCF52xx - ColdFire V2
MCF53xx - ColdFire V3
MCF54xx - ColdFire V4/V4e
- MC68000と差替えて使えるよう、AM335x ARM Cortex-A8を搭載しMC68040 400MHz相当のアクセラレータとして、2021年3月現在、開発途上