モトローラ68000

Hashtags #モトローラ68000

モトローラ68000歴史etアプリケーション

モトローラ68000六十から八千;とも呼ばのm68kはモトローラ68K六十から八-kayが)/ 16 32ビットである複合命令セットコンピュータ(CISC)マイクロプロセッサによって1979年に導入され、モトローラ。半導体製品セクター

この設計は、32 ビットレジスタと16ビット内部データバスを備えた32ビット命令セットを実装しています。[2]アドレスバスは24ビットであり、使用しないセグメント方式プログラマと、それが普及しました。内部的には、16ビットのデータ算術論理演算装置(ALU)と、主にアドレスに使用される2つの16ビットALU [2]を使用し、16ビットの外部データバスを備えています。[3]このため、モトローラはそれを16/32ビットプロセッサと呼んでいました。

32ビット命令セットを備えた最初の広く利用可能なプロセッサの1つとして、当時は比較的高速で動作していた68kは、1980年代を通じて人気のある設計でした。これは、Apple Macintosh、Commodore AmigaAtari STなど、グラフィカルユーザーインターフェイスを備えた新世代のパーソナルコンピュータで広く使用されていました。これは主に、IBMパーソナルコンピュータ(IBM PC)に搭載されているIntel 8088と競合し、簡単にパフォーマンスを上回りました。68Kおよび8088は次のように、他のデザインをプッシュザイログZ8000ナショナルセミコンダクター32016ニッチ市場に、モトローラCPU空間での主要なプレーヤーました。

68kはすぐに家族のメンバーを増やして拡張され、成長を続けるMotorola68000シリーズの一部として完全な32ビットALUを実装しました。元の68kは、16ビット幅の外部バスに制限されているにもかかわらず、一般に他の回線とソフトウェアの上位互換性があります。[2]

1979年製のプレリリースXC68000チップ
モトローラ68000の 死ぬ

42年間の生産後、68000アーキテクチャはまだ使用されています。[4] [5]

Motorola MC68000( リードレスチップキャリア(CLCC)パッケージ)
Motorola MC68000( プラスチックリードチップキャリア(PLCC)パッケージ)

モトローラの最初の広く生産されたCPUはモトローラ6800でした。有能な設計ですが、Zilog Z80などのより強力な設計や、MOS Technology 6502(MOS 6502)などのより安価な設計によって隠されていました。6800の販売見通しが薄暗くなると、モトローラはそれに代わる新しい設計を開始しました。これは、1976年に開始されたMotorola Advanced Computer System on Siliconプロジェクト(MACSS)になりました。

MACSSは、6800との下位互換性のないまったく新しいアーキテクチャの開発を目的としていました。最終的には、既存の6800周辺機器のバスプロトコル互換モードを保持し、8ビットデータバスを備えたバージョンが作成されました。ただし、設計者は主に将来、つまり上位互換性に焦点を合わせていました。これにより、68000の設計は、後の32ビット命令セットアーキテクチャ(ISA)に対して有利なスタートを切ることができます。たとえば、CPUレジスタは32ビット幅ですが、プロセッサ自体の自己完結型構造体の中には、一度に32ビットで動作するものはほとんどありません。MACSSチームは、同様にマイクロコードベースのPDP-11やVAXシステムなどのミニコンピュータープロセッサ設計の影響を大いに利用しました。

1970年代半ば、8ビットマイクロプロセッサメーカーは16ビット世代の導入を競いました。ナショナルセミコンダクターは、1973年から1975年に最初にIMP-16およびPACEプロセッサを使用していましたが、これらには速度の問題があります。インテルは、その先進的な、16/32ビットに働いていたインテルiAPX 432 1975年以来(別名8800)とそのインテルは8086 1976年以来(それは1978年に導入されたが、中に8088とほぼ同一の形で広がったIBM PC数年後で)。16ビットの分野に遅れて到着すると、新しいプロセッサはより多くのトランジスタ(8086では20,000がアクティブであるのに対し、約40,000 [要出典]がアクティブ)、32ビットのマクロ命令、および高く評価されている一般的な使いやすさが得られます。

オリジナルのMC68000は、3.5 µmのフィーチャサイズのHMOSプロセスを 使用して製造されました。1979年9月に正式に導入された[6]初期サンプルは、1980年2月にリリースされ、11月には市販のチップが販売されました。[7]初速度グレードは4、6、および 8MHzです。10 MHzチップは1981年に利用可能になり[要出典]、12.5MHzチップは1982年6月までに利用可能になりました。[7]元のHMOSチップの最速バージョンであるMC68000の16.67MHz「12F」バージョンは1980年代後半まで製造されませんでした。 。

IBMはIBMPC用に68000を検討しましたが、68000の準備ができていなかったため、Intel8088を選択しました。ウォーリー・C・ラインズはこう書いています。「モトローラは、その優れた技術で、過去50年間で最も重要なデザインコンテストを1つ失いました」。[8](IBMInstrumentsは68000ベースのIBMSystem 9000ラボ用コンピューターシステムを簡単に販売しました。)68k命令セットはUnixの実装に特に適しています[9]。68000とその後継はUnixベースのワークステーションの主要なCPUになりました。SunワークステーションとApollo / Domainワークステーションを含みます。68000はまたのような大衆市場のコンピュータに使用されるアップルリサ、マッキントッシュ、アミガ、そしてアタリST。68000は、Microsoft Xenixシステム、および初期のNetWareUnixベースのサーバーで使用されます。68000は、デスクトップの最初の世代で使用されているレーザープリンターオリジナルを含め、アップル社 のLaserWriterとのHP LaserJet。

1982年、68000は、仮想メモリをサポートし、PopekおよびGoldbergの仮想化要件に準拠するために、命令セットアーキテクチャ(ISA)のマイナーアップデートを受け取りました。更新されたチップは68010と呼ばれます。また、小さなループを高速化する新しい「ループモード」を追加し、同じクロック速度で全体のパフォーマンスを約10%向上させます。アドレスバスの31ビットを公開するさらに拡張されたバージョンも68012として少量生産されました。

モトローラは、低コストのシステムとより小さなメモリサイズの制御アプリケーションをサポートするために、同じく1982年に8ビット互換のMC68008を発表しました。これは8ビットデータバスとより小さな(20ビット)アドレスバスを備えた68000です。1982年以降、モトローラは68020および88000プロジェクトにより多くの注意を向けました。

セカンドソース

日立HD68000
トムソンTS68000

他のいくつかの企業は、HMOS 68000のセカンドソースメーカーでした。これらには、12.5MHzバージョンでフィーチャサイズを2.7µmに縮小したHitachi(HD68000)、[7] Mostek(MK68000)、Rockwell(R68000)、Signetics(SCN68000)が含まれます。 )、Thomson / SGS-Thomson(元々はEF68000以降のTS68000)、およびToshiba(TMP68000)。東芝は、CMOS 68HC000(TMP68HC000)の2番目のソースメーカーでもありました。

68000の暗号化されたバリアントであるHitachiFD1089およびFD1094は、オペコードおよびオペコードデータの復号化キーをバッテリーバックアップメモリ​​に保存し、システム16を含む特定のセガアーケードシステムで海賊行為や違法なブートレッグゲームを防ぐために使用されました。[10]

CMOSバージョン

モトローラMC68HC000LC8

68000の最初のCMOSバージョンである68HC000は、日立によって設計され、1985年に共同で導入されました。[11]モトローラのバージョンはMC68HC000と呼ばれ、日立のバージョンはHD68HC000です。68HC000は、8〜20MHzの速度を提供します。CMOS回路を使用することを除いて、HMOS MC68000と同じように動作しましたが、CMOSへの変更により消費電力が大幅に削減されました。オリジナルのHMOSMC68000は、クロック速度に関係なく、25 °Cの周囲温度で約1.35 ワットを 消費しましたが、MC68HC000は8 MHzで0.13ワット、20MHzで0.38ワットしか消費しませんでした。(CMOS回路とは異なり、HMOSはアイドル状態でも電力を消費するため、消費電力はクロックレートによってほとんど変化しません。)AppleはMacintoshPortableで使用するために68HC000を選択しました。

モトローラは1990年にMC68008をMC68HC001に置き換えました。[12]このチップはほとんどの点で68HC000に似ていますが、データバスはリセット時の入力ピンの値に応じて16ビットモードまたは8ビットモードで動作できます。したがって、68008と同様に、より安価な8ビットメモリを備えたシステムで使用できます。

68000のその後の進化は、より最新の組み込み制御アプリケーションとオンチップ周辺機器に焦点を合わせました。68EC000チップとSCM68000コアM6800周辺バスを除去し、そしてユーザ・モード・プログラムからのSR命令からMOVEを除外し、ユーザモードで実行するとき68EC000と68SEC000前68000個のCPUとの互換性のみ68000のCPUではない100%のオブジェクトコードを作成します。スーパーバイザーモードで実行した場合、違いはありません。[13] 1996年、モトローラはスタンドアロンコアを完全に静的な回路で更新し、低電力モードでわずか2  µWを消費し、MC68SEC000と呼びました。[14]

モトローラは1996年にHMOSMC68000とMC68008の生産を停止しましたが[15]、そのスピンオフ会社であるフリースケールセミコンダクタは、MC68HC000、MC68HC001、MC68EC000、MC68SEC000、およびMC68302とMC68306マイクロコントローラーとそれ以降のバージョンのDragonBallを生産していました。家族。68000のアーキテクチャの子孫である680x0、CPU32、およびColdfireファミリもまだ生産中でした。最近では、仙台ファブの閉鎖に伴い、68HC000、68020、68030、および68882のすべての部品が製造中止になり、68SEC000のみが生産されています。[16]

マイクロコントローラコアとして

「真の」32ビットマイクロプロセッサに引き継がれて以来、68000は多くのマイクロコントローラのコアとして使用されています。1989年、モトローラはMC68302通信プロセッサを発表しました。[17]

アーケードゲームPCBで使用されている2つのHitachi68HC000 CPU

68000は、その導入時に、WICAT 150、[18]初期のAlpha Microsystemsコンピューター、Sage II / IV、Tandy 6000 / TRS-80 Model 16、Fortune32:16などのマルチユーザーマイクロコンピューターを含む高価格システムで最初に使用されました。 ; Hewlett-PackardのHP9000シリーズ200システム、最初のApollo / Domainシステム、Sun MicrosystemsのSun-1、CorvusConceptなどのシングルユーザーワークステーション。グラフィックス端末などのデジタルイクイップメントコーポレーションのVAXstation 100およびSilicon Graphicsの「IRIS 1000と1200のUnixシステムでは、急速に1980年代を通じて、市場で人気の残っ68Kラインのより高機能な後の世代に移動します。

1980年代半ばまでに、製造コストの低下により、68000は、Apple LisaとMacintoshから始まり、Commodore Amiga、Atari ST、Sharp X68000に続いて、パーソナルコンピュータと家庭用コンピュータで使用できるようになりました。一方、Sinclair QLマイクロコンピューターは、ICL One Per Deskビジネスターミナルなどの派生物とともに、68008の最も商業的に重要な利用法でした。Helix Systems(米国ミズーリ州)は、SWTPC SS-50バスSS-64の拡張機能を設計し、68008プロセッサを中心に構築されたシステムを製造しました。

RISCとx86の採用により、デスクトップ/ワークステーションCPUとして68000シリーズが置き換えられましたが、このプロセッサは組み込みアプリケーションでかなりの用途がありました。1990年代初頭までに、68000個のCPUを1パーツあたり30米ドル未満で購入できるようになりました 。[要出典]

ビデオゲームメーカーは、68000を多くのアーケードゲームや家庭用ゲームコンソールのバックボーンとして使用していました。1982年からのAtariのFood Fightは、最初の68000ベースのアーケードゲームの1つでした。その他には、セガのシステム16、カプコンのCPシステムとCPS-2、SNKのネオジオが含まれていました。1980年代後半では、68000は、セガのあるパワー家庭用ゲーム機に安価に十分であったメガドライブ/ジェネシスコンソールともメガCDのそれのためのアタッチメント(メガCDシステムは、それらの二つが68000s 3つのCPUを、持っています)。1993年のマルチプロセッサAtariJaguarコンソールは68000をサポートチップとして使用しましたが、一部の開発者は慣れているためプライマリプロセッサとして使用していました。1994年のマルチプロセッサSegaSaturnコンソールは、68000をサウンドコプロセッサとして使用しました(Mega Drive / GenesisがZ80をサウンドおよび/またはその他の目的のコプロセッサとして使用するのと同じです)。

特定のアーケードゲーム(例えば、スティールガンナーに基づいて、他ナムコシステム2)デュアル68000 CPU構成を使用し、[19]三重68000 CPU構成で及びシステムも存在する(例えば、ギャラクシーフォースセガYボードに基づいて、その他) 、[20] Jalecoによって使用されているクアッド68000CPU構成(サウンド用の1つの68000は他の68000 CPUと比較してクロックレートが低い)[21] BigRunCiscoHeatなどのゲーム用。もう1つは、5番目の68000(他の68000 CPUとは異なるクロックレート)が、JalecoアーケードゲームのWild Pilotで入出力(I / O)処理に使用されました。[22]

68000は、組み込みコントローラーとしても大きな成功を収めました。早くも1981として、レーザプリンタようイマヘンインプリント-10としては、68000最初のHPを備え、外部ボードによって制御されたレーザージェット、1984年に導入され、内蔵8MHzの68000他のプリンタメーカーに付属は、68000を採択しました1985年に最初のPostScriptレーザープリンタであるLaserWriterを発表したAppleを含みます。68000は、1980年代の残りの期間を通じてプリンタで広く使用され続け、ローエンドプリンタでは1990年代まで存続しました。

68000は、産業用制御システムの分野でも成功を収めました。マイクロプロセッサとして68000または派生物を使用することで恩恵を受けたシステムの中には、テキサスインスツルメンツのアレンブラドリーによって製造され、その後、シーメンスによってTIのその部門を買収した後のプログラマブルロジックコントローラ(PLC)のファミリがありました。このようなシステムのユーザーは、国内ユーザーと同じ割合で製品の陳腐化を受け入れず、20年以上前にインストールされたにもかかわらず、多くの68000ベースのコントローラーが21世紀まで信頼できるサービスを継続する可能性があります。

80年代の多くのデジタルオシロスコープでは[23]、68000が波形表示プロセッサとして使用されてきました。LeCroy 9400 / 9400A [24]を含む一部のモデルは、68000を波形演算プロセッサ(2つの波形/参照/波形メモリの加算、減算、乗算、除算を含む)として使用し、一部のデジタルオシロスコープは68000を使用します( 9400 / 9400A)は、波形に対して高速フーリエ変換機能を実行することもできます。

683XX 68000アーキテクチャに基づいたマイクロコントローラは、ネットワーキングおよび通信機器、テレビのセットトップボックス、実験室や医療機器、さらには携帯型電卓で使用されています。MC68302とその派生製品は、Cisco、3com、Ascend、Marconi、Cycladesなどの多くの通信製品で使用されています。過去のモデルのPalm PDAやハンドスプリング社のバイザーは使用ドラゴンボール、68000の派生AlphaSmartはそのポータブルワープロのそれ以降のバージョンでのDragonBallファミリを使用しています。テキサス・インスツルメンツは、そのハイエンドグラフ電卓で68000を使用していますTI-89およびTI-92シリーズと航海200。これらの初期のバージョンでは、静的な68EC000コアを備えた専用のマイクロコントローラーが使用されていました。それ以降のバージョンでは、標準のMC68SEC000プロセッサが使用されます。

68000の修正バージョンは、System370プロセッサーのIBMXT / 370ハードウェアエミュレーターの基礎を形成しました。

アドレスバス

68000には、24ビットの外部アドレスバスと2つのバイト選択信号が「置き換えられた」A0があります。したがって、これらの24行は、バイト解像度で16MBの物理メモリをアドレス指定できます。アドレスの保存と計算では、内部で32ビットを使用します。ただし、デバイスピンが物理的に不足しているため、上位8つのアドレスビットは無視されます。これにより、24ビットの物理アドレス空間にのみアクセスしながら、論理的にフラットな32ビットのアドレス空間用に作成されたソフトウェアを実行できます。モトローラの内部32ビットアドレス空間に対する意図は上位互換性であり、68000命令セットの後の32ビット実装を最大限に活用する68000ソフトウェアを作成することを可能にしました。[2]

ただし、これはプログラマーが互換性のないソフトウェアを作成することを妨げるものではありませんでした。上位アドレスバイトを破棄した、またはアドレス指定以外の目的で使用した「24ビット」ソフトウェアは、32ビット68000の実装で失敗する可能性があります。たとえば、AppleのMac OSの初期(7.0より前)のバージョンでは、メモリブロックマスターポインタの上位バイトを使用して、ロックパージ可能などのフラグを保持していました。それ以降のバージョンのOSはフラグを近くの場所に移動し、Appleは1989年のMac IIciのリリース以降、「32ビットクリーン」ROMを搭載したコンピューターの出荷を開始しました。

68000ファミリは、マルチバイト整数をビッグエンディアン順にメモリに格納します。

内部レジスタ

CPUは、 8個の32ビット汎用データ持つレジスタ(D0-D7)、8つのアドレス・レジスタ(A0-A7)を。最後のアドレスレジスタはスタックポインタであり、アセンブラはラベルSPをA7と同等のものとして受け入れます。当時、これは多くの点でかなりの数のレジスターでした。68000が割り込みに迅速に応答できるように十分に小さかった(8つのデータレジスタD0〜D7と7つのアドレスレジスタA0〜A6をすべて保存する必要がある最悪の場合でも、合計1​​5のレジスタ)。部分的な結果をメモリに保持せずに完全にプロセッサ内で実行できるため、ほとんどの計算を高速化します。(スーパーバイザーモードの例外ルーチンは、合計8つのアドレスレジスターになるユーザースタックポインターA7も保存できることに注意してください。ただし、68000のデュアルスタックポインター(A7およびスーパーバイザーモードA7 ')設計では、これは通常不要です。マルチタスクシステムでタスク切り替えが実行されたとき。)

2種類のレジスタを使用すると、1つの32ビットアドレスと1つの16ビットデータの計算を一度に実行できます。これにより、アドレスとデータを並行して処理できるため、命令の実行時間が短縮されます。[2]

ステータスレジスタ

68000には16ビットのステータスレジスタがあります。上位8ビットはシステムバイトであり、その変更は特権があります。下位8ビットはユーザーバイトであり、条件コードレジスタ(CCR)とも呼ばれ、その変更には特権がありません。68000の比較、算術、および論理演算は、条件コードを変更して、後の条件付きジャンプで使用するために結果を記録します。条件コードビットは、「ゼロ」(Z)、「キャリー」(C)、「オーバーフロー」(V)、「拡張」(X)、および「負」(N)です。「拡張」(X)フラグは、キャリーフラグとは別のものであるため、特筆に値します。これにより、算術演算、論理演算、およびシフト演算からの余分なビットを、制御フローおよび論理積のキャリーから分離することができます。

指図書

設計者は、アセンブリ言語を直交させようとしました。つまり、命令は動作モードとアドレスモードに分けられ、ほとんどすべてのアドレスモードがほとんどすべての命令で使用できます。56個の命令と16ビットの最小命令サイズがあります。多くの命令およびアドレッシングモードは、より多くのアドレスまたはモードビットを含むために長くなります。

特権レベル

CPU、そして後にはファミリ全体が、2つのレベルの特権を実装します。ユーザーモードでは、割り込みレベル制御などの特権命令を除くすべてにアクセスできます。[25]スーパーバイザー特権は、すべてへのアクセスを許可します。割り込みは常に監視になります。スーパーバイザビットはステータスレジスタに格納され、ユーザープログラムに表示されます。[25]

このシステムの利点は、スーパーバイザーレベルに個別のスタックポインターがあることです。これにより、設計者は割り込みの最大スタックアップのスタックフレームを保持するために必要なメモリを割り当てる必要がないため、マルチタスクシステムでタスクに非常に小さなスタックを使用できます。

割り込み

CPUは7つの割り込みレベルを認識します。レベル1から5が厳密に優先されます。つまり、番号の大きい割り込みは常に番号の小さい割り込みに割り込むことができます。ステータスレジスタでは、特権命令により、現在の最小割り込みレベルを設定し、優先度の低いまたは等しい割り込みをブロックできます。たとえば、ステータスレジスタの割り込みレベルが3に設定されている場合、4から7までのより高いレベルで例外が発生する可能性があります。レベル7は、レベルトリガーのマスク不可割り込み(NMI)です。レベル1は、それより高いレベルによって中断される可能性があります。レベル0は、割り込みがないことを意味します。レベルはステータスレジスタに保存され、ユーザーレベルのプログラムに表示されます。

ハードウェア割り込みは、保留中の最高の割り込み優先度をエンコードする3つの入力を使用してCPUに通知されます。通常、割り込みをエンコードするには別のエンコーダが必要ですが、3つを超えるハードウェア割り込みを必要としないシステムでは、ソフトウェアの複雑さが増す代わりに、割り込み信号をエンコードされた入力に直接接続できます。割り込みコントローラは、のように単純なようであることができる74LS148プライオリティエンコーダ、またはその一部であってもよい超大規模集積ような(に使用MC68901複合機など(VLSI)周辺チップアタリSTのコンピュータとの範囲シャープのX68000)、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」があり、ユーザーモードソフトウェアが少量の特権状態に読み取り専用でアクセスできるため、フルプロセッサ仮想化のPopekおよびGoldberg仮想化要件を満たしていません。ただし、後で68000から派生した68EC000および68SEC000は、「MOVEfromSR」命令が特権を持っているため要件を満たしています。同じ変更が68010以降のCPUに導入されました。

68000は、仮想メモリを簡単にサポートすることもできません。これには、失敗したメモリアクセスをトラップして回復する機能が必要です。68000は、トラップに使用できるバスエラー例外を提供しますが、オペレーティングシステムが例外を処理すると、障害が発生した命令を再開するのに十分なプロセッサ状態を保存しません。いくつかの企業は、異なるフェーズクロックで並列に実行される2つの68000チップを使用して機能する仮想メモリを備えた68000ベースのUnixワークステーションの作成に成功しました。「先頭の」68000が不正なメモリアクセスに遭遇すると、追加のハードウェアが「メイン」の68000に割り込んで、不正なメモリアクセスにも遭遇しないようにします。この割り込みルーチンは、仮想メモリ機能を処理し、「先頭」の68000を正しい状態で再起動して、「メイン」の68000が割り込みから戻ったときに適切に同期された操作を続行します。

これらの問題は、MC68010のリリースにより、68kアーキテクチャの次のメジャーリビジョンで修正されました。バスエラーとアドレスエラーの例外は、リカバリを容易にするために大量の内部状態をスーパーバイザスタックにプッシュし、「MOVEfromSR」命令が特権化されました。ユーザーモードソフトウェアが代わりに使用するために、新しい非特権の「MOVEfromCCR」命令が提供されています。オペレーティングシステムは、必要に応じて、ユーザーモードの「SRからの移動」命令をトラップしてエミュレートできます。

標準のアドレッシングモードは次のとおりです。

  • 直接登録
    • データレジスタ、例:「D0」
    • アドレスレジスタ、例:「A0」
  • 間接的に登録する
    • 単純なアドレス、例:(A0)
    • ポストインクリメントのアドレス、例:(A0)+
    • 事前にデクリメントされたアドレス、例:−( A0)
    • 16ビットの符号付きオフセットを持つアドレス(例:16(A0))
    • インデックスレジスタと8ビット符号付きオフセット(例:8(A0、D0)または8(A0、A1))で間接的にレジスタ
    (A0)+および-(A0)の場合、実際のインクリメントまたはデクリメント値はオペランドサイズに依存することに注意してください。バイトアクセスはアドレスレジスタを1、ワードを2、ロングを4に調整します。
  • 変位と相対的なPC(プログラムカウンター)
    • 相対16ビット符号付きオフセット(16(PC)など)。このモードは、位置に依存しないコードに非常に役立ちました。
    • インデックス付きの8ビット符号付きオフセットとの相対値(例:8(PC、D2))
  • 絶対メモリ位置
    • 「$ 4000」などの数字、またはアセンブラによって翻訳された記号名のいずれか
    • ほとんどの68000アセンブラは、「0x」または末尾のHの代わりに、16進数に「$」記号を使用していました。
    • このアドレッシングモードには16ビットバージョンと32ビットバージョンがありました
  • イミディエイトモード
    • 命令に格納されているデータ(例:「#400」)
  • クイックイミディエートモード
    • オペコードに値が格納された3ビット符号なし(またはmoveqで8ビット符号付き)
    • addqおよびsubqでは、0は8に相当します
    • たとえば、moveq#0、d0はclr.l d0よりも高速でした(ただし、どちらもD0を0に等しくしました)

プラス:ステータスレジスタへのアクセス、および後のモデルでは、他の特殊レジスタへのアクセス。

ほとんどの命令にはドット文字のサフィックスが付いており、8ビットバイト( ".b")、16ビットワード( ".w")、および32ビット長( ".l")で操作を実行できます。

その時代の多くのCPUと同様に、一部の命令のサイクルタイミングはソースオペランドによって異なりました。たとえば、符号なし乗算命令は、完了するまでに(38 + 2n)クロックサイクルかかります。ここで、「n」はオペランドに設定されたビット数に等しくなります。[26]固定サイクルカウントをとる関数を作成するには、乗算命令の後に追加のコードを追加する必要がありました。これは通常、元の乗算オペランドで設定されなかったビットごとに余分なサイクルを消費します。

ほとんどの命令はダイアディックです。つまり、操作にはソースと宛先があり、宛先が変更されます。注目すべき指示は次のとおりです。

  • 算術:ADD、SUB、MULU(符号なし乗算)、MULS(符号付き乗算)、DIVU、DIVS、NEG(加法否定)、およびCMP(引数を減算してステータスビットを設定することによって行われる一種の比較ですが、格納されませんでした結果)
  • 2進化10進演算:ABCD、NBCD、およびSBCD
  • 論理:EOR(排他的論理和)、AND、NOT(論理和)、OR(包括的論理和)
  • シフト:(論理、つまり右シフトは最上位ビットにゼロを入れます)LSL、LSR、(算術シフト、つまり最上位ビットを符号拡張します)ASR、ASL、(eXtendを介して回転し、そうではありません)ROXL、ROXR、 ROL、ROR
  • メモリまたはデータレジスタでのビットテストと操作:BSET(1に設定)、BCLR(0にクリア)、BCHG(反転)、およびBTST(変更なし)。これらの命令はすべて、最初にデスティネーションビットをテストし、デスティネーションビットがそれぞれ0(1)の場合、CCR Zビットをセット(クリア)します。
  • マルチプロセッシング制御:TAS、テストアンドセットは、分割できないバス操作を実行し、セマフォを使用して、単一のメモリを共有する複数のプロセッサを同期できるようにしました。
  • 制御フロー:JMP(ジャンプ)、JSR(サブルーチンへのジャンプ)、BSR(サブルーチンへの相対アドレスジャンプ)、RTS(サブルーチンからの戻り)、RTE(例外からの戻り、つまり割り込み)、TRAP(同様のソフトウェア例外のトリガー)ソフトウェア割り込みへ)、CHK(条件付きソフトウェア例外)
  • ブランチ:Bcc(「cc」は、ステータスレジスタ内の条件コードの14のテストの1つを指定しました:ステータスレジスタから利用可能な、等しい、より大きい、より小さい、キャリー、およびほとんどの組み合わせと論理反転)。残りの2つの可能な条件(常に真と常に偽)には、BRA(常に分岐)とBSR(サブルーチンへの分岐)という別々の命令ニーモニックがあります。
  • デクリメントアンドブランチ:DBcc( "cc"はブランチ命令の場合)。条件がfalseの場合、Dレジスタの下位ワードをデクリメントし、結果が-1($ FFFF)でない場合はデクリメントします。 、目的地に分岐しました。終了値として0ではなく-1を使用することで、最初はカウントが0の場合に何もしなくてもよいループを簡単にコーディングでき、ループに入る前に別のチェックを行う必要がありません。これにより、DBccのネストも容易になりました。

Motorola68EC000コントローラー

68EC000は、組み込みコントローラーアプリケーション用に設計された、ピン配置がわずかに異なる68000の低コストバージョンです。68EC000は、リセット時に切り替え可能な8ビットまたは16ビットの データバスを持つことができます。[27]

プロセッサは、8MHzおよび16MHz構成を含むさまざまな速度で利用でき、 それぞれ2,100および4,376のDhrystoneを生成します 。これらのプロセッサには浮動小数点ユニットがなく、ECシリーズには必要なコプロセッサ命令がないため、FPUコプロセッサ(MC68881 / 2)を実装することは困難です。

68EC000は、MIDIシンセサイザーの一部であったEnsoniq楽器やサウンドカードなど、多くのオーディオアプリケーションでコントローラーとして使用されていました。[28] Ensoniqサウンドボードでは、コントローラーは、CPUを搭載していない競合他社と比較していくつかの利点を提供しました。プロセッサにより、TSRプログラムを使用せずに、MPU-401MIDI合成やMT-32エミュレーションなどのさまざまなオーディオタスクを実行するようにボードを構成できました。これにより、ソフトウェアの互換性が向上し、CPU使用率が低下し、ホストシステムのメモリ使用量がなくなりました。

Motorola 68EC000コアは、後にMotorola / Freescaleのm68kベースのDragonBallプロセッサで使用されました。

また、中にサウンドコントローラとして使用されたセガサターン用ゲーム機とのコントローラとしてHP JetDirectの イーサネット1990年代半ばのためのコントローラボードのLaserJetプリンタ。

以下の68000アセンブリコードは、という名前のサブルーチン用です。このサブルーチンはstrtolower、8ビット文字のヌル終了文字列を宛先文字列にコピーし、すべてのアルファベット文字を小文字に変換します。

サブルーチンは、レジスタA6をフレームポインタとして使用して呼び出しフレームを確立します。この種の呼び出し規約のサポートの再入可能と再帰的なコードとは、通常のような言語で使用されるCおよびC ++。次に、サブルーチンは、スタックから渡されたパラメーター(srcおよびdst)を取得します。次にループし、src文字列からASCII文字(1バイト)を読み取り、大文字のアルファベット文字であるかどうかを確認し、そうである場合は小文字に変換します。それ以外の場合はそのままにして、文字をに書き込みます。dst文字列。最後に、文字がヌル文字であったかどうかをチェックします; そうでない場合は、ループを繰り返します。そうでない場合は、前のスタックフレーム(およびA6レジスタ)を復元して戻ります。文字列ポインタ(レジスタA0およびA1)は、ループの各反復で自動インクリメントされることに注意してください。

対照的に、以下のコードはスタンドアロン関数用であり、TI-89シリーズの計算機用の最も制限の厳しいバージョンのAMSでも、カーネルに依存せず、実行時にテーブル、ファイル、またはライブラリで値が検索されません。システムコール、例外処理、使用する最小限のレジスタ、または保存する必要はありません。これは、西暦3月1日からの歴史的なユリウス日またはグレゴリオ暦に有効です。2ダース未満の操作で、対応する場所に格納されている3つの入力を使用して呼び出されたときに、ISO8601と互換性のある日数を計算します。

; ; WDN、アドレス-結果d0を格納するため。FLAG、0または2-それぞれユリウス暦またはグレゴリオ暦から選択しますDATE、year0mda-基本的なISO形式のバイナリワード&byte&byteとしての日付スタンプ;(YEAR、year〜YEAR = DATE due to big-[[Endianness#Current_architectures | endianness]]);  move.l  DATE d0  move.l  d0 d1 ; ; 手順1-[[SuperBASIC#Example | Lachman's congruence]]  andi.l  $ f00 d0  divu  100 d0  addi.w  193 d0  andi.l  $ ff d0  divu  100 d0  ;を適用します。d0の上位ワードに月インデックスiがあります(mod 100); 手順2-を適用します-日付 スワップの 前のうるう日のユリウス年としてspqrを使用します d0andi.l  $ ffff d0  add.b  d1 d0  add.w  YEAR d0  subi.l  $ 300 d1  lsr  2 D1の スワップ D1  ADD.W  D1 D0  ; spqr / 4+年+ i + da}} ; ; (ステップ0を適用-グレゴリオ暦の調整) mulu  FLAG d1  divu  50 d1  mulu  25 d1  lsr  2 d1  add.w  d1 d0  add.w  FLAG d0  ; (sp32div16)+ spqr / 4+年+ i + da ;  divu  7 d0 スワップ d0  ; d0.wは日番号になります;  move.w  D0 WDN  。アドレスWDNのに日数を返し RTS ; 曜日は、次のように曜日番号に対応します。日= 0月= 1火= 2水= 3木= 4金= 5土= 6 ;

  • モトローラ68000シリーズ
  • Motorola 6800 –8ビットの前身
  • DTACK Grounded –初期の68000ニュースレター

  1. ^ ヒース、スティーブ(1995)。マイクロプロセッサのアーキテクチャとシステム:RISC、CISC、およびDSP(第2版)。p。13. ISBN 0-7506-2303-920191012日取得
  2. ^ a b c d e スターンズ、トーマスW.(1983年4月)。「モトローラのMC68000の背後にある設計哲学」。バイト。巻 8号 4 2018619日取得
  3. ^ Motorola M68000ファミリプログラマーズリファレンスマニュアル (PDF)。アリゾナ州フェニックス:モトローラ。1992.p。1-1。ISBN 0-13-723289-6
  4. ^ 「MC68000:低コストの32ビットマイクロプロセッサ(HC000、HC001、EC000、およびSEC000を含む)」。NXPセミコンダクターズ2021-03-24を取得
  5. ^ ターリー、ジム(2020-08-10)。「68Kの懐かしさを呑み込む新しい40年前のコンピューターを作りたいですか?」。電子工学ジャーナル2021-03-24を取得
  6. ^ ケン・ポルソン。「マイクロプロセッサの年表」。Processortimeline.info 。2013年9月27日取得
  7. ^ a b c DTACK GROUNDED、The Journal of Simple 68000/16081 Systems、1984年3月、p。9
  8. ^ ラインズ、ウォルデンC.(2017-06-22)。「テキサスインスツルメンツの最大の失敗の裏話:TMS9900マイクロプロセッサ」。IEEEスペクトラム2020616日取得
  9. ^ Rood、Andrew L。; クライン、ロバートC。; ブリュースター、ジョンA.(1986年9月)。「UNIXとMC68000」。バイト。p。179。
  10. ^ 「FD1094–セガレトロ」。segaretro.org
  11. ^ 「 CompanyBriefs」、ニューヨークタイムズ、1985年9月21日、TimesSelect(サブスクリプション)から入手可能。
  12. ^ 「68HC001は68008を廃止しました」。マイクロプロセッサレポート。1990年6月20日。
  13. ^ 「モトローラは68000ファミリを合理化し、「EC」バージョンの68000、 '020、' 030、および '040に加えて、ローエンドの68300チップ" "。マイクロプロセッサレポート。1991年4月17日。
  14. ^ 「モトローラは、低電力組み込みアプリケーション向けのMC68SEC000プロセッサを発表しました」(プレスリリース)。モトローラ。1996年11月18日。1997年3月28日のオリジナルからアーカイブ。
  15. ^ comp.sys.m68k Usenetの投稿、1995年5月16日; スレッド内の他の投稿も参照してください。保守終了の発表は1994年後半でした。標準的なモトローラの寿命末期の慣行によれば、最終注文は1995年で、最終出荷は1996年でした。
  16. ^ 「フリースケール150mm仙台ファブ閉鎖-一般的な製品の製造中止」。2010年11月24日。
  17. ^ 「マルチプロトコルプロセッサは68000とRISCを組み合わせます」。ESD:電子システムデザインマガジン。1989年11月1日–AccessMyLibrary経由。
  18. ^ 「美術館〜WICAT150」。Old-computers.com 。2013年9月27日取得
  19. ^ 「GoogleCodeArchive-Google Code ProjectHostingの長期ストレージ」。code.google.com 。取得した2016年1月15日を
  20. ^ "openlase-mame / segaybd.c at master --jv4779 / openlase-mame"。GitHub 。取得した2016年1月15日を
  21. ^ 「GoogleCodeArchive-Google Code ProjectHostingの長期ストレージ」。code.google.com 。取得した2016年1月15日を
  22. ^ "master-mamedev / historic-messのhistoric-mess / cischeat.c"。GitHub 。取得した2016年1月15日を
  23. ^ Philips PM3320 250 MS / sデュアルチャネルデジタルストレージオシロスコープサービスマニュアル、セクション8.6、注文コード4822 87205315。
  24. ^ LeCroy 9400 / 9400Aデジタルオシロスコープサービスマニュアル、セクション1.1.1.3マイクロプロセッサ、1990年8月。
  25. ^ a b M68000 8- / 16- / 32ビットマイクロプロセッサユーザーズマニュアル第9版 (PDF)。モトローラ。1993.p。6-2。
  26. ^ 「標準命令実行時間」。oldwww.nvg.ntnu.no
  27. ^ ボーイズ、ロバート(1996年1月6日)。「M68kのよくある質問(FAQ)、comp.sys.m68k」。
  28. ^ Soundscapeエリート仕様。ファックスシート、Googleグループ、1995年4月25日から。

データセットとマニュアル
  • M68000マイクロプロセッサユーザーズマニュアル(第9版) ; モトローラ(フリースケール); 224ページ; 1996年。
  • M68000ユーザーマニュアルの補遺(Rev 0) ; モトローラ(フリースケール); 26ページ; 1997年。
  • M68000ファミリープログラマーズリファレンスマニュアル; モトローラ(フリースケール); 646ページ; 1991; ISBN  978から0137232895。
  • 68000、68010、68020入門書; 第1版; スタンケリーブートルとボブファウラー; ハワードサムズアンドカンパニー; 370ページ; 1985; ISBN  978から0672224058。(アーカイブ)
  • 68000マイクロプロセッサをマスターする; 第1版; フィリップロビンソン; タブブック; 244ページ; 1985; ISBN  978から0830608867。(アーカイブ)
  • 68000シリーズのポケットガイドアセンブリ言語; 第1版; ロバートアースキン; ピットマン出版; 70ページ; 1984; ISBN  978から0273021520。(アーカイブ)
  • MotorolaM68000ダイの回路図 [1]

  • comp.sys.m68k FAQ
  • アセンブラ命令の説明
  • cpu-collection.deの68000枚の画像と説明
  • EASy68K、Windows用のオープンソース68kアセンブラ
  • 68kおよびm88kリソース–モトローラのVMEベースの68kボードに関する情報