
Motorola 68000(Motorola 68kまたはm68kと略されることもあり、通常は「シックスティエイトサウザンド」と発音される)[ 2 ] [ 3 ]は、 16/32ビットの複合命令セットコンピュータ(CISC)マイクロプロセッサであり、1979年にMotorola Semiconductor Products Sectorによって発表された。
この設計では、 32 ビット命令セット、32 ビットレジスタ、および 16 ビット内部データバスが実装されています。[ 4 ]アドレスバスは 24 ビット幅で、メモリ分割を使用しないため、プログラミングが容易になっています。内部的には、16 ビットデータ演算論理ユニット(ALU) と、主にアドレスに使用される 2 つの 16 ビット演算ユニットを使用し、[ 4 ] 16 ビット外部データバスを備えています。[ 5 ]このため、モトローラはこれを 16/32 ビットプロセッサと呼んでいます。
32ビット命令セット、大きな非分割アドレス空間、そして当時としては比較的高速な処理速度を備えた、広く普及した最初のプロセッサの一つとして、68kは1980年代を通じて人気を博しました。Macintosh 128K、Amiga、Atari ST、X68000といったグラフィカルユーザーインターフェースを備えた新世代のパーソナルコンピュータや、セガジェネシス/メガドライブなどのビデオゲーム機に広く採用されました。また、いくつかのアーケードゲーム機にも68000が使用されました。
Motorola 68020から始まるMotorola 68000 シリーズの後期のプロセッサは、完全な 32 ビット ALU を使用し、完全な 32 ビット アドレス バスとデータ バスを備えているため、32 ビット演算が高速化され、68000 および 68010 の 24 ビット アドレス指定やMotorola 68012の 31 ビット アドレス指定ではなく、32 ビット アドレス指定が可能になっています。オリジナルの 68k は、外部バスが 16 ビット幅に制限されているにもかかわらず、一般的にソフトウェアの互換性が他のシリーズとあります。[ 4 ]
これらのプロセッサはもはや生産されていませんが、[ 6 ] 68000の機能的に同一のクローンや複製が現在も活発に製造されています。


モトローラが最初に大量生産したマイクロプロセッサは6800で、1974年初頭に発表され、同年後半には大量生産が可能になった。[ 7 ]同社は1976年9月までに2万5000台を販売するという目標を掲げ、実際にその目標を達成した。優れた設計ではあったものの、Zilog Z80のようなより高性能な設計や、 MOS Technology 6502のようなより安価な設計に影を潜めてしまった。[ 8 ] 1976年後半には売上が伸び悩み、ゼネラルモーターズのエンジン制御プロジェクトやその他のタスクによって部門は救われた。[ 9 ]
6800 が導入される頃には、少数の 16 ビット設計が市場に出回っていた。これらは一般的に、データ ゼネラル NovaやPDP-11のようなミニコンピュータプラットフォームをモデルにしていた。当時の半導体製造プロセスに基づくと、これらは多くの場合、ナショナル セミコンダクターIMP-16のようなマルチチップ ソリューションであったり、速度に問題のあるシングルチップPACEであったりした。 [ 10 ]
6800の販売見通しが暗くなりつつあったものの、エンジン制御の販売で資金が潤沢だった1976年後半、オペレーションマネージャーのコリン・クルックは、今後の販売をいかにして成功させるかを検討し始めた。彼らは、インテルが8080シリーズの16ビット拡張版(後にインテル8086として登場)に取り組んでいることを知っており、16ビットのZilog Z80 (後にZ8000となる)の噂も耳にしていた。これらは、以前の16ビットシステムで見られた問題を解消する新しい設計技術を採用するだろう。[ 11 ]
モトローラは、8086 と似たような製品を、その性能の 10% 以内で発売すれば、インテルが市場で自分たちを凌駕するだろうと認識していた。競争するために、同じコストで 2 倍の性能、あるいは同じ性能で半分のコストを実現することを目標とした。クルックは、市場で最も強力なプロセッサでハイエンド市場を攻めることを決めた。[ 11 ] 16 ビットでは不十分で、設計はより大規模でなければならず、そのためには 32 ビットの機能も必要だった。[ 12 ]クルックはこのアプローチを 1976 年末までに決定した。 [ 11 ]
クルックは設計を構築するためにモトローラ・アドバンスト・コンピュータ・システム・オン・シリコン(MACSS)プロジェクトを立ち上げ、トム・ガンターを主任設計者として雇った。ガンターは1977年1月にチームを編成し始めた。[ 13 ]パフォーマンス目標は1秒あたり100万命令(MIPS)に設定された。彼らは、アップルコンピュータやタンディのようなマイクロコンピュータベンダーだけでなく、 NCRやAT&Tのようなミニコンピュータ企業もこの設計で取り戻したいと考えていた。[ 13 ]
チームは、8 ビット設計は新しい設計の基盤とするには制限が多すぎると感じたため、6800 との後方互換性の試みを断念することにした。新しいシステムは、当時最も人気のあるミニコンピュータ設計であるPDP-11の影響を受けている。 [ 14 ]当時、ミニコンピュータの重要な概念は直交命令セットの概念であり、すべての操作があらゆる種類のデータに対して動作することを許可し、PDP-11 命令セットはこの概念の典型的な例と考えられていた。これにより、データの取得元を変更するわずかなバリエーションである多くの異なる命令が生まれた。内部ユニットに正しいデータを供給するため、MACSS はマイクロコードを多用した。マイクロコードとは、基本的に読み取り専用メモリ内の小さなプログラムであり、必要なデータを収集し、操作を実行し、結果を書き出す。これはメインフレームやミニコンピュータでは一般的だったが、MACSS はマイクロプロセッサでこの技術を使用した最初のものの一つとなった。[ 15 ] [ 16 ]
6800 には、 UARTや同様のインターフェース システムなど、引き続き有用なサポート ハードウェアが多数存在した。そのため、新しい設計では、既存の 6800 周辺機器用のバス プロトコル互換モードが維持された。 [ 17 ] [ 16 ]
32個のデータピンと32個のアドレスピンを持つチップには、64個のピンが必要で、さらに電源やその他の機能のためのピンも必要になります。当時、64ピンのデュアルインラインパッケージ(DIP)は「大きくて高価」で「ひどい」システムだったので、それが検討できる最大のサイズでした。それを収めるために、Crookはハイブリッド設計を選択し、32ビット命令セットアーキテクチャ(ISA)を採用しましたが、それを実装するコンポーネントは算術論理演算ユニット(ALU)のように16ビットでした。[ 13 ]外部インターフェースは16個のデータピンと24個のアドレスピンに削減され、すべてが64ピンパッケージに収まるようになりました。これは「テキサスゴキブリ」として知られるようになりました。[ 12 ] [ a ]
1970年代半ばまでに、モトローラのMOS設計技術は競合他社に比べて遅れをとっており、製造ラインは歩留まりの低さに悩まされることもあった。1970年代後半までに、同社は日立との技術交換プログラムに参加し、生産能力を劇的に向上させた。その一環として、最新の5インチウェハサイズと3.5μmのフィーチャサイズを持つインテルのHMOSプロセスを使用して、MOS-8という名の新しい工場が建設された。 [ 18 ]これは、競合他社に追いつくことを目的とした投資だった。ZilogやMOS Technologyといった新興半導体企業でさえ、モトローラよりも先に、空乏モードNMOSロジックで製造されたCPUを発表していた。実際、モトローラはエンハンスメントモードとメタルゲートの段階的廃止において同時代の企業に大きく遅れをとっていた可能性があり、ガンターは、68000自体が当初メタルゲート設計を採用していたにもかかわらず成功しなければならなかったことを回想している。[ 19 ]追いつこうとしているという点は明らかだが、これは完全に正確な要約とは言えない。なぜなら、MACCS プロジェクトの開始以前のモトローラの 1976 年のデータシートには、6800 ファミリーの大部分がシリコンゲートであると記載されているからである。[ 20 ]実際、ガンター自身が 1979 年に 68000 を紹介した記事では、シリコンゲート空乏モード HMOS 設計であると強調していた。[ 21 ] 初期の頃のモトローラのプロセスと製造上の欠陥の程度がどうであれ、チームはひるむことなく、業界をリードする性能を持つマイクロプロセッサの追求において妥協することはなかった。[ 22 ]
1979年9月に正式に発表され、[ 23 ] 1980年2月に最初のサンプルがリリースされ、11月には量産チップが店頭で入手可能になった。[ 24 ]初期の速度グレードは4、6、8MHzだった。10MHzチップは1981年中に利用可能になり、[ 25 ] 12.5MHzチップは1982年6月までに利用可能になった。 [ 24 ]オリジナルのHMOSチップの最速バージョンである16.67MHzの「12F」バージョンのMC68000は、1980年代後半まで生産されなかった。
初期のチップサンプルとともに、Motorola は開発ボード、Motorola MC68000 デザイン モジュール (M68KDM または単に KDM) を提供しました。このボードには、32k バイトのDRAMを備えた 68000 マイクロプロセッサが搭載されていました。イジェクタ エッジには 2 つの 16 ビット周辺インターフェイスアダプタ ポートがあり、反対側には古い Motorola 6800 EXORciser バス用のオス エッジ コネクタがあり、標準の 6800 エミュレータで使用できました。非同期通信ポート (ACIA) の 1 つは標準の RS-232C データ端末に接続するように構成され、もう 1 つは RS-232C 端末をエミュレートするように構成されており、ホスト コンピュータとの通信が可能でした。透過モードでは、ホスト コンピュータで作成されたプログラムを 68000 メモリに直接ダウンロードできました。68000 のメモリの内容は、さらに処理するためにホスト コンピュータにアップロードすることもできました。[ 26 ] : p.111 [ 27 ]
KDMボードには、モトローラの新しいMacsBugデバッガを含むソケット式のROMチップが搭載されていました。KDMボード上のスイッチでデバッガが起動しました。[ 28 ] MacsBugは後にAppleの初期のMacintoshコンピュータで使用されました。
1981 年初頭までに、68k はハイエンドで受注を獲得し、ガンターは Apple にアプローチしてビジネスを獲得し始めた。当時、68k は大量購入で約 125 ドルで販売されていた。スティーブ・ジョブズとのミーティングで、ジョブズはApple Lisaに 68k を使用することについて話したが、「本当の未来は私が個人的に開発しているこの製品にある。このビジネスが欲しいなら、15 ドルで販売することを約束しなければならない」と述べた。[ 29 ]モトローラは、最初は 55 ドルで販売し、次に 35 ドルに下げるなどして販売することを提案して対抗した。ジョブズはこれに同意し、Macintosh は6809から68k に移行した。平均価格は最終的に 14.76 ドルに達した。[ 29 ] Apple の最初の 50 年によると、ジョブズは交渉のために日立が準備していたクローン チップを寿司に乗せてモトローラの CEOロバート ガルビンに渡したと言われている。 [ 30 ] : 73
1982年、68000は仮想メモリをサポートし、 PopekとGoldbergの仮想化要件に準拠するために、命令セットアーキテクチャ(ISA)のマイナーアップデートを受けました。アップデートされたチップは68010と呼ばれています。[ 31 ]また、小さなループを高速化する新しい「ループモード」が追加され、同じクロック速度で全体的なパフォーマンスが約10%向上しました。アドレスバスの31ビットを公開するさらに拡張されたバージョンも、 68012として少量生産されました。
低コストシステムやメモリ容量の小さい制御アプリケーションをサポートするため、モトローラは1982年に8ビット互換の68008を発表しました。これは、8ビットのデータバスとより小さな(20ビット)アドレスバスを備えた68000です。1982年以降、モトローラは68020と88000プロジェクトに注力しました。


HMOS 68000の二次供給元メーカーは他にもいくつかありました。これには、 12.5 MHzバージョンでフィーチャサイズを2.7 μmに縮小した日立(HD68000) [ 24 ]、Mostek (MK68000)、 Rockwell(R68000)、Signetics(SCN68000)、Thomson / SGS-Thomson(当初はEF68000、後にTS68000)、東芝(TMP68000)などが含まれます。
日立FD1089やFD1094などの68000の暗号化バリアントは、オペコードの復号鍵とオペコードデータをバッテリーバックアップメモリに格納します。これらは、海賊版や違法なブートレグゲームを防ぐために、特定のセガアーケードシステム(System 16ゲームを含む)で使用されました。[ 32 ]

68HC000は、 68000の最初のCMOSバージョンで、日立が設計し、1985年に共同で発表されました。 [ 33 ]モトローラはMC68HC000として、日立はHD68HC000として提供しました。東芝もCMOS 68HC000(TMP68HC000)のセカンドソースメーカーでした。68HC000は8~20MHzの速度を提供します 。CMOS回路を使用している点を除けば、HMOS 68000と全く同じように動作しますが、CMOSへの変更により消費電力が大幅に削減されました。オリジナルのHMOS 68000は、クロック速度に関係なく、周囲温度25 ℃で約1.35ワットを消費しましたが、68HC000は8MHzでわずか0.13ワット、 20MHzで0.38ワットしか消費しませんでした。 (CMOS回路とは異なり、HMOSはアイドル時にも電力を消費するため、クロック周波数による消費電力の変化は小さい。)Appleは、Macintosh PortableとPowerBook 100に68HC000を採用した。
モトローラは1990年に68008を68HC001に置き換えた。[ 34 ]これはほとんどの点で68HC000に似ているが、データバスはリセット時の入力ピンの値に応じて16ビットモードまたは8ビットモードのどちらでも動作できる。そのため、68008と同様に、より安価な8ビットメモリを備えたシステムで使用できる。
68000 の後期の進化は、より現代的な組み込み制御アプリケーションとオンチップ周辺機器に焦点を当てていました。低コストの68EC000チップと SCM68000 コアは、M6800 周辺バスを削除し、ユーザーモード プログラムから MOVE from SR 命令を除外したため、68EC000 と 68SEC000 は、ユーザーモードで実行した場合、以前の 68000 CPU と 100% オブジェクト コード互換性がない唯一の 68000 CPU となりました。スーパーバイザモードで実行した場合は、違いはありません。[ 35 ]後者の方法は、68EC000 と SCM68000 がPopek と Goldberg の仮想化要件を満たすことができるようにするために行われ、後に後継機である 68010 にも実装されました。1996 年、モトローラはスタンドアロン コアを完全に静的回路で更新し、低電力モードではわずか 2 μWしか消費しないようにしました。これは 68SEC000 として知られるようになりました。[ 36 ]
モトローラは1996年6月1日にHMOS 68000、68008、68010、68330、68340の生産を終了したが[ 37 ] [ 38 ]、スピンオフ企業のフリースケール・セミコンダクター( NXPと合併)は、CMOS 68HC000、68HC001、68EC000、68SEC000、68302、68306マイクロコントローラ、およびDragonBallファミリーの後継バージョンを引き続き生産していた。68000のアーキテクチャの後継である680x0、CPU32、Coldfireファミリーも引き続き生産されていた。さらに最近では、 2010年の仙台工場の閉鎖に伴い、68HC000、68020、68030、68882のすべての部品が生産中止となり、68SEC000のみが生産されたまま残っていました[ 39 ]。その後、これも生産中止となりました[ 6 ] 。生産されていた68000ベースのプロセッサは68302のみで、68331や68332(68000から派生したもの)など、683xxファミリーの他のバリアントもありましたが、68302は2025年に生産が終了し[ 40 ] 、 683xxファミリーの残りのメンバーとして68331と68332のみが生産されるようになりました。[ 41 ] [ 42 ] 68SEC000などの製造中止になったプロセッサの一部は、さまざまな販売代理店を通じて入手可能でした。
2024年、ロチェスター・エレクトロニクスはNXPのライセンスの下、CMOS 68HC000の複製を開始しました。物理設計とテストプログラムの両方がNXPからロチェスターに移管され、正規の供給元を市場に提供し続けました。68020などの68000ファミリーの他のメンバーも、少なくとも2014年以降、ロチェスター・エレクトロニクスによって複製されています。ロチェスター・エレクトロニクスが提供する68HC000プロセッサは、日本の東北セミコンダクター株式会社(TSC)がTSC6ウェハー工場で製造したJ82Mマスクセットのクローンを使用しています。これは、米国で製造された以前のE72NおよびG73Kマスクセットを置き換えるためにモトローラが68HC000に使用した最後のマスクセットでした。[ 43 ]
真の32ビットマイクロプロセッサに取って代わられて以来、68000は多くのマイクロコントローラのコアとして使用されています。1989年、モトローラは通信プロセッサ68302を発表しました。[ 44 ]このプロセッサは、モトローラが2004年に半導体事業をスピンオフした後、フリースケールとNXPによって供給されていました。[ 40 ]
IBMはIBM PCに68000を検討したが、Intel 8088を選択した。しかし、IBM Instrumentsは68000ベースのIBM System 9000ラボ用コンピュータシステムを短期間販売した。68k命令セットはUnixの実装に特に適しており[ 45 ] 、68000とその後継機はSunワークステーションやApollo/Domainワークステーションを含むUnixベースのワークステーションの主要CPUとなった。
1981年、モトローラは教育および訓練目的のシングルボードコンピュータであるMotorola 68000教育用コンピュータボードを発表しました。このボードには、68000本体に加えて、メモリ、I/Oデバイス、プログラマブルタイマー、カスタム回路用のワイヤラッピング領域が含まれていました。このボードは、1990年代初頭まで、アセンブリプログラミングの学習ツールとして米国の大学で使用され続けました。[ 46 ]
68000 は、発売当初は高価格帯のシステムで使用されていました。これには、WICAT 150 [ 47 ]のようなマルチユーザー マイクロコンピュータ、初期のAlpha Microsystemsコンピュータ、Sage II / IV、Tandy 6000 / TRS-80 Model 16、Fortune 32: 16、 Hewlett-PackardのHP 9000 Series 200 システム、最初のApollo/Domainシステム、Sun MicrosystemsのSun-1、Corvus Conceptなどのシングルユーザーワークステーション、Digital Equipment CorporationのVAXstation 100 やSilicon Graphicsの IRIS 1000 および 1200 などのグラフィックターミナルが含まれます。Unixシステムは、より高性能な 68k ラインの後継世代に急速に移行し、1980 年代を通じてその市場で人気を維持しました。
1980年代半ばまでに、生産コストの低下により、68000はApple LisaやMacintoshを皮切りに、Amiga、Atari ST、X68000といったパーソナルコンピュータでの使用が可能になった。
Sinclair QLマイクロコンピュータは、ICL One Per Deskビジネス端末などの派生製品とともに、68008 の最も商業的に重要な利用例でした。Helix Systems (米国ミズーリ州) は、SWTPC SS-50 バスの拡張であるSS-64 を設計し、68008 プロセッサを中心としたシステムを製造しました。68000 [ 48 ]および 68008 [ 49 ]のセカンドプロセッサは、それぞれ 1984 年と 1985 年に BBC Micro 向けにリリースされ、Steve Furber によると、Acorn が ARM を開発するのに貢献しました。[ 50 ]
RISCやx86の普及により、68000シリーズはデスクトップ/ワークステーション用CPUとしての地位を失ったものの、組み込みアプリケーションでは依然として広く利用されていた。1990年代初頭には、68000シリーズのCPUは1個あたり30ドル以下で購入できるまでになっていた。
68000は組み込みコントローラとしても大きな成功を収めた。1981年にはすでに、Imagen Imprint-10などのレーザープリンタが68000を搭載した外部ボードによって制御されていた。1984年に発売された初代HP LaserJetには、8MHzの68000が内蔵されていた。他のプリンタメーカーも68000を採用し、 1985年にはAppleが初のPostScriptレーザープリンタであるLaserWriter を発表した。68000は1980年代後半を通してプリンタに広く使用され続け、1990年代に入っても低価格帯のプリンタで使われ続けた。
68000は産業用制御システムの分野で成功を収めました。68000またはその派生型をマイクロプロセッサとして採用することで恩恵を受けたシステムには、アレン・ブラッドリー、テキサス・インスツルメンツ、そして後にTIの同部門が買収されたシーメンスが製造したプログラマブルロジックコントローラ(PLC)シリーズなどがあります。こうしたシステムのユーザーは、家庭用ユーザーほど製品の陳腐化を許容しないため、20年以上前に設置されたにもかかわらず、多くの68000ベースのコントローラが21世紀に入ってもなお信頼性の高いサービスを提供し続ける可能性は十分にあります。
80年代の多くのデジタルオシロスコープ[ 51 ]では、 68000が波形表示プロセッサとして使用されています。LeCroy 9400/9400A[52]を含む一部のモデルでは、68000が波形演算プロセッサ(2つの波形/基準/波形メモリの加算、減算、乗算、除算を含む)としても使用されています。また、68000を使用する一部のデジタルオシロスコープ(9400/9400Aを含む)では、波形に対して高速フーリエ変換機能も実行できます。
68000アーキテクチャに基づく683XXマイクロコントローラは、ネットワーク機器や通信機器、テレビセットトップボックス、実験機器や医療機器、さらには携帯電卓にも使用されています。MC68302とその派生製品は、Cisco、3com、Ascend、Marconi、Cycladesなどの通信機器製品に多数使用されています。Palm PDAやHandspring Visorの過去のモデルでは、68000の派生製品であるDragonBallが使用されていました。AlphaSmartは、携帯ワードプロセッサの後のバージョンでDragonBallファミリーを使用しました。Texas Instrumentsは、ハイエンドのグラフ電卓であるTI-89およびTI-92シリーズ、Voyage 200に68000を使用しました。
IBM XT/370ハードウェアエミュレーターであるSystem 370プロセッサは、68000の改良版をベースに開発された。
68000は発売以来、多くのビデオゲームメーカーによって、アーケードゲーム、ゲーム機、そして一部の携帯ゲーム機の基盤として採用されてきた。
アタリの『フードファイト』(1983年)は、68000ベースのアーケードゲームの初期作品の一つだった。その他には、セガのシステム16(1985年)、カプコンのCPシステム(1988年)とCPシステムII(1993年)、SNKのネオジオ(1990年)といったアーケードゲームプラットフォームも含まれる。特定のアーケードゲーム(スティールガンナー(1990年)やナムコシステム2(1987年)をベースにしたもの、ハングオン(1985年)などのゲームで使用されたスーパースカラーシリーズのさまざまなセガアーケードシステムボードなど)はデュアル68000 CPU構成を使用しており、[ 53 ]トリプル68000 CPU構成のシステムも存在します(ギャラクシーフォース(1988年)やセガYボード(1988年)をベースにしたものなど)、[ 54 ]また、ジャレコがビッグラン(1989年)やシスコヒート(1990年)などのゲームで使用したクアッド68000 CPU構成(サウンド用の1つの68000は他の68000 CPUに比べてクロックレートが低い)[ 55 ]もあります。もう1つの5番目の68000(他の68000 CPUとは異なるクロックレート)は、ジャレコのアーケードゲーム「ワイルドパイロット」(1992年)で入出力(I/O)処理に使用されました。[ 56 ]

1980年代後半には、68000は家庭用ゲーム機を動かすのに十分なほど安価になり、セガのジェネシス(1988年)は68000をメインCPUとして使用しました。ジェネシスのアタッチメントであるセガCD (1991年)も、コプロセッサとして68000を使用しています(セガCDシステムには3つのCPUがあり、そのうち2つは68000です)。68000 CPUを搭載した他のゲーム機には、ネオジオAES(1990年)(アーケード版をベースにしたもの)、教育用ピコ(1993年)、マルチプロセッサのジャガー(1993年)、サウンドコプロセッサとして68EC000(低価格の68000)を使用したセガサターン(1994年)、携帯型ジェネシスノマド(1995年)などがあります。[ 57 ]
68000 は 24 ビットの外部アドレス バスと、A0 を「置き換えた」 2 つのバイト選択信号を備えています。したがって、これらの 24 本のラインは、バイト解像度で 16 MB の物理メモリをアドレス指定できます。アドレスの格納と計算は内部的に 32 ビットを使用しますが、デバイス ピンの物理的な不足により、上位 8 ビットのアドレス ビットは無視されます。これにより、論理的にフラットな 32 ビットアドレス空間用に記述されたソフトウェアを実行しながら、24 ビットの物理アドレス空間にのみアクセスできます。モトローラが内部 32 ビット アドレス空間で意図したのは、前方互換性であり、68000 命令セットの後の 32 ビット実装を最大限に活用できる 68000 ソフトウェアを記述できるようにすることでした。[ 4 ]
しかし、これによってプログラマーが互換性のないソフトウェアを作成することが妨げられることはありませんでした。上位アドレスバイトを破棄したり、アドレス指定以外の目的で使用したりする「24ビット」ソフトウェアは、32ビット68000実装では失敗する可能性がありました。たとえば、AppleのMac OSの初期バージョン(7.0以前)では、メモリブロックマスターポインタの上位バイトを使用して、lockedやpurgeableなどのフラグを保持していました。Appleは1989年のMac IIciのリリースから「 32ビットクリーン」ROMを搭載したコンピュータの出荷を開始し、OSの後のバージョンではフラグを近くの場所に移動しました。
68000ファミリーは、マルチバイト整数をメモリにビッグエンディアン順で格納します。
CPUには、8つの32ビット汎用データレジスタ(D0~D7)と8つのアドレスレジスタ(A0~A7)があります。最後のアドレスレジスタはスタックポインタであり、アセンブラではラベルSPをA7と同等とみなします。当時としては、このレジスタ数は多くの点で適切でした。68000が割り込みに迅速に対応できるほど小さく(最悪の場合、8つのデータレジスタD0~D7と7つのアドレスレジスタA0~A6、合計15個のレジスタを保存する必要がある場合でも)、同時に、メモリに部分的な結果を保持することなくプロセッサ内で完全に計算を実行できるため、ほとんどの計算を高速化できるほど大きくもありました。(スーパーバイザモードの例外ルーチンでは、ユーザースタックポインタA7も保存できますが、その場合は合計8個のアドレスレジスタが必要になります。ただし、68000のデュアルスタックポインタ(A7とスーパーバイザモードA7')設計により、マルチタスクシステムでタスク切り替えが行われる場合を除き、通常は不要です。)
2種類のレジスタがあることで、アドレスレジスタを操作する際に条件コードを変更せずに済む。また、16個のレジスタを2つの異なるタイプに分割することで、わずか3ビットでエンコードできる。[ 4 ]
68000 には 16 ビットのステータス レジスタがあります。上位 8 ビットはシステム バイトで、その変更は特権です。下位 8 ビットはユーザー バイトで、条件コード レジスタ (CCR) とも呼ばれ、その変更は特権ではありません。68000 の比較、算術、および論理演算は、条件コードを変更して結果を記録して、後続の条件付きジャンプで使用します。条件コード ビットは、「キャリー」(C)、「オーバーフロー」(V)、「ゼロ」(Z)、「負」(N)、「拡張」(X) です。「拡張」(X) フラグは、キャリー フラグとは別であるため、特に言及する必要があります。これにより、算術、論理、およびシフト演算からの余分なビットを、キャリー多倍長演算から分離することができます。[ 58 ]
設計者たちはアセンブリ言語を直交化しようと試みた。つまり、命令は操作とアドレス指定モードに分けられ、ほぼすべての命令の1つのパラメータに対してほぼすべてのアドレス指定モードが利用可能である。命令は56種類あり、最小命令サイズは16ビットである。多くの命令とアドレス指定モードは、より多くのアドレスデータや即値データを含めるために長くなっている。
CPU、そして後にファミリー全体が、2つのレベルの特権を実装しています。ユーザーモードでは、割り込みレベルの制御などの特権命令を除くすべてにアクセスできます。[ 59 ]スーパーバイザ特権では、すべてにアクセスできます。割り込みは常にスーパーバイザになります。スーパーバイザビットはステータスレジスタに格納され、ユーザープログラムから参照できます。[ 59 ]
このシステムの利点は、スーパーバイザレベルが独立したスタックポインタを持つことです。これにより、マルチタスクシステムではタスクごとに非常に小さなスタックを使用できます。なぜなら、設計者は割り込みの最大スタックアップのスタックフレームを保持するために必要なメモリを割り当てる必要がないからです。
CPU は 7 つの割り込みレベルを認識します。レベル 1 から 5 までは厳密に優先順位が付けられています。つまり、番号の大きい割り込みは常に番号の小さい割り込みを中断できます。ステータス レジスタでは、特権命令によって現在の最小割り込みレベルを設定でき、それより低いまたは同じ優先順位の割り込みをブロックできます。たとえば、ステータス レジスタの割り込みレベルが 3 に設定されている場合、レベル 4 から 7 までのより高いレベルでは例外が発生する可能性があります。レベル 7 はレベル トリガー型の非マスク可能割り込み(NMI) です。レベル 1 は、それより高いレベルの割り込みによって中断される可能性があります。レベル 0 は割り込みなしを意味します。レベルはステータス レジスタに格納され、ユーザー レベル プログラムから参照できます。
ハードウェア割り込みは、保留中の割り込み優先度が最も高いものをエンコードする3つの入力を使用してCPUに通知されます。通常、割り込みをエンコードするには別のエンコーダが必要ですが、3つ以上のハードウェア割り込みを必要としないシステムでは、ソフトウェアの複雑さが増すという代償を伴いますが、割り込み信号をエンコードされた入力に直接接続することも可能です。割り込みコントローラは、 74LS148優先度エンコーダのようなシンプルなものから、MC68901多機能周辺機器( Atari STシリーズのコンピュータやX68000で使用)のような超大規模集積回路(VLSI)周辺機器チップの一部まで様々です。MC68901多機能周辺機器は、 UART、タイマー、パラレルI/Oも提供します。
「例外テーブル」(割り込みベクタテーブル割り込みベクタアドレス)はアドレス0から1023に固定されており、256個の32ビットベクタを許可します。最初のベクタ(RESET)は、開始スタックアドレスと開始コードアドレスの2つのベクタで構成されます。ベクタ3から15は、バスエラー、アドレスエラー、不正命令、ゼロ除算、CHKおよびCHK2ベクタ、特権違反(特権昇格をブロックするため)、およびライン1010エミュレータ、ライン1111エミュレータ、ハードウェアブレークポイントとなったいくつかの予約済みベクタなど、さまざまなエラーを報告するために使用されます。ベクタ24は、実際の割り込みを開始します。偽の割り込み(ハードウェア応答なし)、レベル1からレベル7の自動ベクタ、次に16個の TRAPベクタ、さらにいくつかの予約済みベクタ、そしてユーザー定義ベクタです。
リセット時に開始コードアドレスベクタが常に有効である必要があるため、システムでは一般的に、ベクタとブートストラップコードを格納するために、アドレス0から始まる不揮発性メモリ( ROMなど)が備えられていました。しかし、汎用システムでは、オペレーティングシステムが実行時にベクタを変更できることが望ましいです。これは、ROM内のベクタをRAM内のジャンプテーブルに向けるか、バンク切り替えを使用して実行時にROMをRAMに置き換えることによって実現されることがよくありました。
68000は、特権を持たない命令「MOVE from SR」を1つだけ持ち、ユーザーモードのソフトウェアが少量の特権状態に読み取り専用でアクセスできるため、 PopekとGoldbergが提唱するプロセッサの完全仮想化要件を満たしていません。68000の派生版である68EC000と68SEC000は、「MOVE from SR」命令が特権命令であるため、要件を満たしています。同様の変更は、68010以降のCPUにも導入されました。
68000 は仮想メモリを容易にサポートすることもできません。仮想メモリには、メモリへのアクセス失敗を捕捉して回復する機能が必要です。68000 は、捕捉に使用できるバス エラー例外を提供しますが、オペレーティングシステムが例外を処理した後、失敗した命令を再開するのに十分なプロセッサ状態を保存しません。いくつかの企業は、異なる位相のクロックで並列に動作する 2 つの 68000 チップを使用することで、仮想メモリを備えた 68000 ベースの Unix ワークステーションの製造に成功しました。「先行」の 68000 がメモリへのアクセスに失敗すると、追加のハードウェアが「メイン」の 68000 を割り込み、メインの 68000 も同様のメモリ アクセスに失敗するのを防ぎます。この割り込みルーチンは仮想メモリ機能を処理し、「メイン」の 68000 が割り込みから戻ったときに、適切に同期された動作を継続できるように、「先行」の 68000 を正しい状態で再起動します。
これらの問題は、68kアーキテクチャの次期メジャーリビジョンであるMC68010のリリースで修正されました。バスエラーおよびアドレスエラー例外は、リカバリを容易にするために大量の内部状態をスーパーバイザスタックにプッシュし、「MOVE from SR」命令は特権命令となりました。代わりに、ユーザーモードソフトウェアが使用できる新しい非特権命令「MOVE from CCR」が用意されています。オペレーティングシステムは、必要に応じてユーザーモードの「MOVE from SR」命令をトラップしてエミュレートできます。
標準のアドレス指定モードは以下のとおりです。
さらに、ステータスレジスタへのアクセス、そして後のモデルではその他の特殊レジスタへのアクセスも可能です。
ほとんどの命令には、8ビットバイト、16ビットワード、32ビットロングを操作するバリアントがあります。アセンブリ言語では、命令ニーモニックの後にドットと文字を組み合わせた接尾辞「.b」、「.w」、「.l」を使用してバリアントを示します。
同時代の多くのCPUと同様に、一部の命令のサイクルタイミングは、ソースオペランドによって異なりました。たとえば、符号なし乗算命令は、オペランドで設定されているビット数に等しい「n」で完了するまでに(38+2n)クロックサイクルかかります。[ 60 ]固定サイクル数で関数を作成するには、乗算命令の後に余分なコードを追加する必要がありました。これは通常、元の乗算オペランドで設定されていないビットごとに余分なサイクルを消費します。
ほとんどの命令は二項関係であり、つまり、操作にはソースとデスティネーションがあり、デスティネーションが変更されます。注目すべき命令は次のとおりです。

68EC000は、組み込みコントローラアプリケーション向けに設計された、ピン配置が若干異なる68000の低コスト版です。68EC000は、リセット時に切り替え可能な8ビットまたは16ビットのデータバスを備えています。[ 61 ]また、プロセッサには、 PopekとGoldbergの仮想化要件に準拠するためのマイナーな変更がいくつかあり、その中には、SRからのMOVE命令が特権化されていることも含まれています(この変更は68010でも行われました)。
これらのプロセッサは、8MHzと16MHzの構成など、さまざまな速度で提供され、それぞれ2,100Dhrystoneと4,376Dhrystoneの演算能力を備えています。これらのプロセッサには浮動小数点演算ユニットが搭載されておらず、ECシリーズには必要なコプロセッサ命令がないため、FPUコプロセッサ(MC68881/2)を実装することは困難です。
68EC000は、 Ensoniqの楽器やサウンドカードなど、多くのオーディオアプリケーションでコントローラーとして使用され、MIDIシンセサイザーの一部として使用されました。[ 62 ] Ensoniqのサウンドボードでは、このコントローラーは、CPUを搭載していない競合製品と比較して、いくつかの利点を提供しました。プロセッサにより、終了して常駐するプログラムを使用せずに、 MPU-401 MIDI合成やMT-32エミュレーションなどのさまざまなオーディオタスクを実行するようにボードを構成することができました。これにより、ソフトウェアの互換性が向上し、CPU使用率が低下し、ホストシステムのメモリ使用がなくなりました。
Motorola 68EC000コアは、後にMotorola/ Freescaleのm68kベースのDragonBallプロセッサに採用された。
また、セガサターンゲーム機のサウンドコントローラーとして、また1990年代半ばのHP LaserJetプリンター用のHP JetDirect Ethernetコントローラーボードのコントローラーとしても使用されました。
以下の68000アセンブリコードは、 という名前のサブルーチンのものでstrtolower、ヌル終端された 8 ビット文字の文字列を宛先文字列にコピーし、すべてのアルファベット文字を小文字に変換します。[ b ]
このサブルーチンは、レジスタ A6 をフレーム ポインタとして使用して呼び出しフレームを確立します。この種の呼び出し規約は再入可能コードと再帰コードをサポートしており、 CやC++などの言語で一般的に使用されています。次に、サブルーチンはスタックから渡されたパラメータ (srcとdst) を取得します。その後、ループして文字列から ASCII 文字 (1 バイト) を読み取りsrc、それが大文字のアルファベット文字かどうかをチェックし、大文字の場合は小文字に変換し、そうでない場合はそのままにして、その文字をdst文字列に書き込みます。最後に、文字がヌル文字だったかどうかをチェックします。ヌル文字でない場合はループを繰り返し、そうでない場合は前のスタック フレーム (およびレジスタ A6) を復元して戻ります。文字列ポインタ (レジスタ A0 と A1) は、ループの各イテレーションで自動的にインクリメントされることに注意してください。
対照的に、以下のコードはスタンドアロン関数であり、TI-89シリーズの電卓用の最も制限の厳しいバージョンのAMSでも、カーネルに依存せず、実行時にテーブル、ファイル、ライブラリから値を参照せず、システムコールも例外処理も行わず、使用するレジスタも最小限で、保存する必要もありません。西暦1年3月1日からの歴史的なユリウス暦の日付、またはグレゴリオ暦の日付に有効です。対応するLOCATIONSに格納された3つの入力で呼び出されると、 20回未満の操作でISO 8601と互換性のある日番号を計算します。
; ; WDN、結果d0を格納するためのアドレス FLAG、0または2 - それぞれユリウス暦またはグレゴリオ暦を選択する ; DATE、year0mda - 基本的なISO形式のバイナリワード&バイト&バイトとしての日付スタンプ (ビッグエンディアンのため、YEAR、year ~ YEAR=DATE となります) ;move.lDATE,d0move.ld0,d1; ステップ1(ラハマンの合同条件)を適用するandi.l#$f00,d0divu#100,d0addi.w#193,d0andi.l#$ff,d0divu#100,d0; d0 has the month index i in the upper word (mod 100); ステップ2を適用 - spqrをDATEの前のユリウス閏日の年として求めるswapd0andi.l#$ffff,d0add.bd1,d0add.wYEAR,d0subi.l#$300,d1lsr#2,d1swapd1add.wd1,d0; spqr/4 + year + i + da; (ステップ0 - グレゴリオ暦への調整を適用)muluFLAG,d1divu#50,d1mulu#25,d1lsr#2,d1add.wd1,d0add.wFLAG,d0; (sp32div16) + spqr/4 + year + i + da;divu#7,d0swapd0; d0.w becomes the day number;move.wd0,WDN; returns the day number to address WDNrts; 曜日は、曜日の番号と次のように対応します。 日=0 月=1 火=2 水=3 木=4 金=5 土=6 ;
このマニュアルに記載されている情報の多くは、Motorola Inc. の許可を得て、Motorola MC68000 デザインモジュール ユーザーガイド (Motorola 部品番号 MEX68KDM(D4)、1980年8月) から転載したものです。