countersince January 6, 2001X68000 LIBRARYEnglish
更新日: 2016 年 8 月 18 日
X68000 LIBRARY > ソフトウェアライブラリ > 特定のハードウェア用のソフトウェア > 060turbo 関連 > 060turbo.sys > 68060を斬る!!(第7回)

68060を斬る!!(第7回)

説明

MC68060 の解説記事です。月刊電脳倶楽部 117 号(1998 年 2 月号)から 139 号(1999 年 12 月号)にかけて読み物横町で不定期連載していました。転載にあたって内容の再考証は行っていません。ご了承下さい。

68060_07.txt
────────────────────────────────────

                          68060を斬る!!

                                 第7回
                                                                鎌田誠
────────────────────────────────────

  今回から、68060 の MMU(Memory Management Unit; メモリ管理ユニット)に

ついて書きます。


━───────────────────────────────────

        MMU

────────────────────────────────────

●論理アドレスと物理アドレス

  OS やアプリケーションなどを含むあらゆるソフトウェアで、ユーザモードで

使用できるすべての命令と一部の特権命令で直接使用できるアドレスを、“論理

アドレス”(Logical Address)と呼びます。一方、ハードウェアレベルで、RAM

や ROM といったメモリや I/O ポートに実際に割り振られているアドレスを、

“物理アドレス”(Physical Address)と呼びます。

  68000 では論理アドレスと物理アドレスが常に一致しています。つまり、

68000 では論理アドレス空間と物理アドレス空間を区別する必要がありません。

ところが、68020+68851/68030/68040/68060 では、論理アドレスと物理アドレス

が常に一致しているとは限りません。


        論理アドレスと物理アドレス
        ┌────────────────────────────┐
        │┌────── MPU  ──────┐                      │
        ││                              │                      │
        ││┏━ 論理アドレス ━┓        │┏━ 物理アドレス ━┓│
        ││┃                  ┃        │┃                  ┃│
        ││┃プログラムカウンタ┃┏━━┓│┃RAM、ROM、I/O     ┃│
        ││┃アドレスレジスタ  ┣┫MMU ┣┿┫DMAC              ┃│
        ││┃実効アドレス      ┃┗━━┛│┃                  ┃│
        ││┃              etc.┃        │┃              etc.┃│
        ││┗━━━━━━━━━┛        │┗━━━━━━━━━┛│
        ││                              │                      │
        │└───────────────┘                      │
        └────────────────────────────┘


●アドレス空間

  論理アドレスによって構成されている空間を“論理アドレス空間”、物理アド

レスによって構成されている空間を“物理アドレス空間”と呼びます。また、そ

れぞれの空間でメモリ(記憶装置)が割り当てられている部分は特に“論理メモ

リ空間”あるいは“物理メモリ空間”と呼ばれることがあります。


●アドレス変換テーブル

  論理アドレスと物理アドレスの対応は通常は OS によって決定され、68060 の

中にある MMU によって実際に論理アドレスから物理アドレスへの変換が行われ

ます。具体的には、OS などが論理アドレスから物理アドレスを求めるための変

換表を作り、その先頭アドレスを MMU の制御レジスタに書き込みます(制御レ

ジスタへの書き込みには特権命令を使います)。この変換表をアドレス変換テー

ブルと呼びます。


●アドレス変換

  アドレス変換テーブルを構築した上で MMU の制御制御レジスタを操作して

MMU の機能を ON にすると、MMU によるアドレス変換が開始されます。

  68060 のほとんどすべての命令で、実効アドレスが MPU の外側のアドレスバ

スに流れる前に、MMU によって論理アドレスから物理アドレスへの変換が行われ

ます。


●ページ

  MMU によるアドレス変換は、アドレス空間を“ページ”と呼ばれる特定のサイ

ズの領域に区切り、そのページ単位でアドレス変換が行われることになっていま

す。論理アドレス空間は論理ページ、物理アドレス空間は物理ページで区切られ、

どの論理ページをどの物理ページに割り当てるかを MMU に指示することでアド

レス変換の仕方が決定されます。必然的に、すべての論理ページとすべての物理

ページのサイズが常に一致していなければなりません。

  68060 では、ページサイズとして 4KB と 8KB のいずれかを選択できるように

なっています。例えば、ページサイズが 8KB ならば、論理アドレス $00000000

〜$00001FFF が1番目の論理ページ、論理アドレス $00002000〜$00003FFF が2番

目の論理ページ…となります。

  物理ページを論理ページに割り当てることを“マッピング”と言います。


●アドレス変換テーブル

  論理ページと物理ページの対応は、OS などの基本プログラムが“アドレス変

換テーブル”を構築して MMU に指示することになっています。

  68060 の場合は、OS などの基本プログラムが、アドレス変換テーブルの実体

を物理メモリ空間のどこかに記述しなければなりません。そのアドレス変換テー

ブルの先頭の物理アドレスを MMU の制御レジスタである SRP または URP に設

定し、 MMU の制御レジスタ TC を操作して MMU の機能を ON にすることで、ア

ドレス変換が開始されます。


●アドレス変換テーブルの構造

  68060 の MMU によるアドレス変換は 8KB(または 4KB)のページ単位で行わ

れますが、もしも 4GB(32 ビット)の論理アドレス空間の全体に渡って 8KB の

ページで区切って個々のページに対して対応する物理アドレスを記述するなると、

4GB÷8KB=512K 個もの変換を記述しなければならないことになります。これで

は、1 ページ分のアドレス変換を 32 ビットで記述するときアドレス変換テーブ

ルのサイズが 2MB(4KB 単位のときは 4MB)にもなってしまいます。

  ところで、一般的に 4GB の論理アドレス空間の全体を満遍なく使うことはほ

とんどありません。多くの場合は半分以上の領域が未使用です。そこで 68060 

の MMU では、アドレス変換テーブルを木構造で記述することで、連続してメモ

リを割り当てない領域についてはページ毎に区切る以前に木の根元に近い場所で

「割り当てなし」のマークをして、末端のページ毎のテーブルを省略できるよう

になっています。


●アドレス変換の仕組み

  68060 の MMU では、根本に近い側から、ルートレベル、ポインタレベルおよ

びページレベルと呼ばれる 3 段階で分岐する木構造になっています。これに合

わせて、論理アドレスが上位からルートインデックス(7 ビット)、ポインタイ

ンデックス(7 ビット)、ページインデックス(5 または 6 ビット)およびペ

ージオフセット(13 または 12 ビット)という 4 つのフィールドに分けて解釈

され、上から順に使って木構造のテーブルを辿り、物理アドレスが求められます。


アドレス変換テーブルの木構造
┌─────────────────────────────────┐
│                        ┌─┐                                    │
│                        │  │ルートレベル                        │
│                        └┬┘                                    │
│        ┌────────┼────────┐                    │
│      ┌┴┐            ┌┴┐            ┌┴┐                  │
│      │  │            │  │            │  │ポインタレベル    │
│      └┬┘            └┬┘            └┬┘                  │
│  ┌──┼──┐    ┌──┼──┐    ┌──┼──┐              │
│┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐            │
││  ││  ││  ││  ││  ││  ││  ││  ││  │ページレベル│
│└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘            │
└─────────────────────────────────┘


  木の根元がルートポインタです。ルートポインタはルートテーブルの先頭の物

理アドレスを指しています。ルートテーブルとはルートデスクリプタと呼ばれる

情報を 512 個並べたもので、ルートインデックスを用いてルートテーブルから

ルートデスクリプタが取り出される。ルートデスクリプタにはポインタテーブル

の先頭の物理アドレスが含まれています。そしてポインタテーブルもまた 512

個のポインタデスクリプタから成るテーブルです。ここからポインタインデック

スを用いてポインタデスクリプタを取り出します。ポインタデスクリプタにはペ

ージテーブルの先頭の物理アドレスが含まれているので、今度はページインデッ

クスを用いてページデスクリプタを取り出します。1 個のページテーブルに含ま

れるページデスクリプタの個数は 32(または 64)個です。最後にページデスク

リプタに含まれている物理アドレス(の上位 19 または 20 ビット)とページオ

フセットを合体させれば、論理アドレス→物理アドレスの変換が完了します。


アドレス変換の仕組み(ページサイズが 8KB の場合)
┌─────────────────────────────────────┐
│ビット番号                                                                │
│         31          2524          1817      1312                       0 │
│        ┏━━━━━━┯━━━━━━┯━━━━┯━━━━━━━━━━━━┓│
│  論理  ┃   ルート   │  ポインタ  │ページイ│         ページ         ┃│
│アドレス┃インデックス│インデックス│ンデックス       オフセット       ┃│
│        ┗━━↓━━━┷━━↓━━━┷━━↓━┷━━━━━━↓━━━━━┛│
│        ┌──┘            │            └──┐          └───┐    │
│    ┌─┼→┏━━━━━┓┌┼→┏━━━━━┓┌┼→┏━━━━━┓  │    │
│    │  │  ┃          ┃││  ┃          ┃││  ┃          ┃  │    │
│    │  │  ┃          ┃││  ┃          ┃│└→┠─────┨  │    │
│    │  └→┠─────┨││  ┃          ┃│    ┃ページデス┃  │    │
│  ルート    ┃ルートデス┃│└→┠─────┨│    ┃クリプタ  →┐│    │
│ ポインタ   ┃クリプタ  →┘    ┃ポインタデ┃│    ┠─────┨││    │
│            ┠─────┨      ┃スクリプタ→┘    ┃          ┃││    │
│            ┃          ┃      ┠─────┨      ┗━━━━━┛││    │
│            ┃          ┃      ┃          ┃      ページテーブル││    │
│            ┗━━━━━┛      ┗━━━━━┛                    ││    │
│            ルートテーブル     ポインタテーブル                   ││    │
│                            ┌──────────────────┘│    │
│         31                 │               1312           ┌───┘  0 │
│        ┏━━━━━━━━━↓━━━━━━━━┯━━━━━━↓━━━━━┓│
│  物理  ┃             物理ページ             │         ページ         ┃│
│アドレス┃              アドレス              │       オフセット       ┃│
│        ┗━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┛│
└─────────────────────────────────────┘


●ルートポインタレジスタ SRP/URP

  SRP はスーパーバイザモード用、URP はユーザモード用の、ルートポインタレ

ジスタです。ここにアドレス変換テーブルの先頭の物理アドレス(ルートポイン

タ)を書き込みます。ルートポインタは必ず 512 で割り切れるアドレス(下位

9 ビットがすべて 0)でなければなりません。


●デスクリプタ

  デスクリプタとは、アドレス変換の各レベルから下のレベルへ進むために必要

な情報です。

  デスクリプタはいずれも 1 個あたり 32 ビット幅で構成されていますが、そ

こには次のレベルのテーブルや物理ページを指す物理アドレスだけが入っている

わけではありません。例えばページサイズが 8KB のとき、物理アドレスの下位

13 ビットはページオフセットで供給されるので、ページデスクリプタの下位 13

ビットはそのページに関する各種の情報を示すために使用されています。

・デスクリプタタイプ

  すべてのデスクリプタに共通して存在するのがデスクリプタタイプと呼ばれる

情報です。デスクリプタタイプを示すために、デスクリプタの下位 2 ビットが

使われています。

・ルートデスクリプタとポインタデスクリプタ

  ルートデスクリプタとポインタデスクリプタの下位 2 ビットはアッパーレベ

ルデスクリプタタイプ(UDT)と呼ばれ、そのデスクリプタに含まれている次の

レベルのテーブルを指す物理アドレスが有効かどうかを示しています。UDT=00 

または 01 ならば無効、UDT=10 または 11 ならば有効です。無効のときは物理

ページの割り当てが無いことを意味しているので、次のレベルのテーブルは存在

せず、アドレス変換のときにそのテーブルが必要となるような論理アドレスをア

クセスしようとしたときはアクセスエラー例外が発生します。

・ページデスクリプタ

  ページデスクリプタの下位 2 ビットはページデスクリプタタイプ(PDT)と呼

ばれます。PDT=01 または 11 ならばそのページデスクリプタは有効です。

PDT=00 ならば無効、つまり、そのページをアクセスしようとするとアクセスエ

ラー例外が発生します。

  PDT=10 のときは間接デスクリプタと呼ばれ、PDT を除いたページデスクリプ

タの上位 30 ビットが別のページデスクリプタを指す物理アドレスとして解釈さ

れます。つまり、アドレス変換テーブルの木構造が局所的に 4 段階になります。

なお、ページデスクリプタの間接参照は 1 回だけしか許されず、多重間接はア

クセスエラーになります。

・ライトプロテクト(W)

  間接デスクリプタを除くすべてのデスクリプタで、ビット 2 が 1 のとき、そ

の領域がライトプロテクトされていることを示します。スーパーバイザモードか

どうかに関わらず、ライトプロテクトされたページに書き込もうとするとアクセ

スエラーが発生します。060turbo では、SIMM 上に ROM をコピーして使うとき

にその領域をライトプロテクトするためにこのビットを使用しています。

・使用済みフラグ(U)

  間接デスクリプタを除くすべてのデスクリプタで、ビット 3 が 1 のとき、そ

のデスクリプタが使用済みであることを示します。アドレス変換の過程で使用さ

れたデスクリプタのビット 3 が 0 だったとき、MMU によってそこに自動的に 1

が書き込まれます(間接デスクリプタを除く)。なお、MMU がこのビットを 0 

にすることはありません。

・修正済みフラグ(M)

  ページデスクリプタのビット 4 が 1 のとき、そのページに対して書き込み動

作があったことを示します。バスへの書き込み動作に伴うアドレス変換の過程で

使用されたページデスクリプタのビット 4 が 0 だったとき、MMU によってそこ

に自動的に 1 が書き込まれる。なお、MMU がこのビットを 0 にすることはあり

ません。

・キャッシュモード(CM)

  ページデスクリプタのビット 5〜6 は、そのページのキャッシュモードを示し

ます。

        CM=00   キャッシュ許可,ライトスルー
        CM=01   キャッシュ許可,コピーバック
        CM=10   キャッシュ禁止,ストアバッファ禁止
        CM=11   キャッシュ禁止,ストアバッファ許可

・スーパーバイザプロテクト(S)

  ページデスクリプタのビット 7 が 1 のとき、そのページがスーパーバイザプ

ロテクトされていることを示します。そのページをユーザモードでアクセスしよ

うとするとアクセスエラー例外が発生します。060turbo では、システム関係の

領域をスーパーバイザプロテクトするためにこのビットを使用しています。

・ユーザ属性(U0,U1)

  ページデスクリプタのビット 8〜9 はユーザ属性となっており、MMU はこれら

のビットを解釈しません。バスアクセス時にこれらのビットが UPAx 信号線に出

力されるので、ページ単位のスヌープ制御などの処理に利用することができます。

・グローバルビット(G)

  ページデスクリプタのビット 10 は、PFLUSH 命令でアドレス変換キャッシュ

(ATC)をフラッシュするときに、フラッシュする ATC エントリを制限するため

に使用されます。

・ユーザ用ビット(UR)

  ページデスクリプタのビット 11〜12(ページサイズが 4KB のときはビット

11 のみ)はユーザが自由に使うことができます。


デスクリプタのビット配置
┌──────────────────────────────────┐
│ルートデスクリプタ                                                  │
│ 31                            9  8   7   6   5   4   3   2   1  0  │
│┌───────────────┬─┬─┬─┬─┬─┬─┬─┬──┐│
││  ポインタテーブルのアドレス  │×│×│×│×│×│U │W │UDT ││
│└───────────────┴─┴─┴─┴─┴─┴─┴─┴──┘│
│                                                                    │
│ルートデスクリプタ                                                  │
│ 31                            9  8   7   6   5   4   3   2   1  0  │
│┌───────────────┬─┬─┬─┬─┬─┬─┬─┬──┐│
││   ページテーブルのアドレス   │×│×│×│×│×│U │W │UDT ││
│└───────────────┴─┴─┴─┴─┴─┴─┴─┴──┘│
│                                                                    │
│ページサイズが 4KB のときのページデスクリプタ                       │
│ 31                  12 11  10  9   8   7   6  5  4   3   2   1  0  │
│┌──────────┬─┬─┬─┬─┬─┬──┬─┬─┬─┬──┐│
││    物理アドレス    │UR│G │U1│U0│S │ CM │M │U │W │PDT ││
│└──────────┴─┴─┴─┴─┴─┴──┴─┴─┴─┴──┘│
│                                                                    │
│ページサイズが 8KB のときのページデスクリプタ                       │
│ 31              13 12  11  10  9   8   7   6  5  4   3   2   1  0  │
│┌────────┬─┬─┬─┬─┬─┬─┬──┬─┬─┬─┬──┐│
││  物理アドレス  │UR│UR│G │U1│U0│S │ CM │M │U │W │PDT ││
│└────────┴─┴─┴─┴─┴─┴─┴──┴─┴─┴─┴──┘│
│                                                                    │
│間接デスクリプタ                                                    │
│ 31                                                           1  0  │
│┌─────────────────────────────┬──┐│
││                  デスクリプタのアドレス                  │PDT ││
│└─────────────────────────────┴──┘│
└──────────────────────────────────┘


●アドレス変換キャッシュ

  ところで、アプリケーションプログラムがメモリをアクセスしようとしたとき、

MMU は論理アドレスに対応する物理アドレスを毎回求めなければなりません。し

かし、アドレス変換テーブルがメモリ上にあるということは、あるメモリをアク

セスする前にその物理アドレスを決定するために別のメモリ(アドレス変換テー

ブル)をアクセスしなければならないことになり、非常に効率が悪いのです。

  そこで 68060 では、アドレス変換テーブルの一部を MPU の内部の ATC(アド

レス変換キャッシュ)に蓄えておいて、そこに記録されている論理アドレスが使

われたときはアドレス変換テーブルをアクセスせずに物理アドレスを求めること

ができるようになっています。

  68060 の ATC は、命令とデータのアクセスについてそれぞれ 64 ページ分の

アドレス変換を保存できます。

  ATC はキャッシュなので、アドレス変換テーブルを更新したときは該当する

ATC の内容を破棄しなければなりません。ATC を破棄するための命令が、特権命

令 PFLUSH です。PFLUSH 命令は ATC の全体を破棄するだけでなく、特定の論理

ページや特定のモード(スーパーバイザまたはユーザ、命令またはデータ)に該

当する ATC だけを選択して破棄することもできるようになっています。


●透過変換

  68060 では、論理アドレス空間の一部に対して、透過変換(Transparent

Translation)を指定することができます。透過変換とは、論理アドレスと物理

アドレスを強制的に一致させて MMU によるアドレス変換を回避する機能です。

  透過変換は、透過変換レジスタと呼ばれる DTTR0/DTTR1/ITTR0/ITTR1 の 4 つ

の制御レジスタで指定します。DTTRn はデータアクセスの透過変換、ITTRn は命

令アクセスの透過変換を指示します。命令アクセスとデータアクセスの透過変換

レジスタがそれぞれ 2 つずつありますが、TTR0 と TTR1 に相関関係はなく、単

に透過変換領域を 2 箇所設定できるだけです。


        透過変換レジスタ DTTR0/DTTR1/ITTR0/ITTR1 の内容
        ┌───┬───────────────────────────┐
        │ビット│                         意味                         │
        ├───┼───────────────────────────┤
        │31〜24│アドレスベース(上位8ビット)                         │
        │23〜16│アドレスマスク(上位8ビット)                         │
        │15    │透過変換のON/OFF(0=OFF,1=ON)                          │
        │14〜13│スーパーバイザ/ユーザモードの指定                     │
        │      │00=ユーザモードのときだけ透過変換を行う               │
        │      │01=スーパーバイザモードのときだけ透過変換を行う       │
        │      │1x=スーパーバイザ/ユーザモードに関係なく透過変換を行う│
        │12〜10│0に固定                                               │
        │9〜8  │UPA(ユーザページ属性)                               │
        │7     │0に固定                                               │
        │6〜5  │キャッシュモード                                      │
        │4〜3  │0に固定                                               │
        │2     │1=ライトプロテクト                                    │
        │1〜0  │0に固定                                               │
        └───┴───────────────────────────┘


  透過変換が行われる領域は、論理アドレスの上位 8 ビットが透過変換レジスタ

のアドレスベースと一致する領域です。ただし、アドレスベースとの比較のとき

に、アドレスマスクで 1 が指定されたビットが無視されます。


●アドレス変換制御レジスタ TC

  アドレス変換制御レジスタ TC を操作することで、アドレス変換の ON/OFF、

ページサイズの指定、アドレス変換キャッシュの制御およびデフォルトキャッシ

ュモードの指定を行います。


        TC の内容
        ┌───┬───┬───────────────────┐
        │ビット│ 名称 │                 意味                 │
        ├───┼───┼───────────────────┤
        │31〜16│      │0に固定                               │
        │15    │E     │アドレス変換のON/OFF(0=OFF,1=ON)      │
        │14    │P     │ページサイズ(0=4KB,1=8KB)             │
        │13    │NAD   │1=データATCをアロケートしない         │
        │12    │NAI   │1=命令ATCをアロケートしない           │
        │11    │FOTC  │1=データATCを半分(32ページ分)にする   │
        │10    │FITC  │1=命令ATCを半分(32ページ分)にする     │
        │9〜8  │DCO   │データキャッシュのモードのデフォルト  │
        │7〜6  │DUO   │データアクセスのUPAビットのデフォルト │
        │5〜4  │DWO   │ライトプロテクトのデフォルト          │
        │3〜2  │DCI   │命令キャッシュのモードのデフォルト    │
        │1〜0  │DUI   │命令アクセスのUPAビットのデフォルト   │
        └───┴───┴───────────────────┘


●転送修飾

  転送修飾(Transfer Modifier)は 68060 がアドレスバスを使用するときに必

ず TMx 信号線に出力されるもので、アドレスバスに出力したアドレスの種類を

示します(TT1 信号線が 0 の場合)。

        ┌──────┬────────────────┐
        │ TM2 TM1 TM0│        アドレスの種類          │
        ├──────┼────────────────┤
        │  0   0   0 │データキャッシュプッシュ        │
        │  0   0   1 │ユーザデータ、MOVE16            │
        │  0   1   0 │ユーザコード                    │
        │  0   1   1 │MMU テーブルサーチデータ        │
        │  1   0   0 │MMU テーブルサーチコード        │
        │  1   0   1 │スーパーバイザデータ            │
        │  1   1   0 │スーパーバイザコード            │
        │  1   1   1 │予約                            │
        └──────┴────────────────┘

  68030 を知っている人ならばすぐに気付くと思いますが、68060 の TMx 信号

線は 68030 の FCx(ファンクションコード)信号線に相当します。


●ファンクションコードレジスタ

  68060 には DFC と SFC という制御レジスタがあり、それぞれデスティネーシ

ョンファンクションコードレジスタ、ソースファンクションコードレジスタと呼

びます。これらのファンクションコードレジスタに設定できる値は 0〜7 に限ら

れており、その意味は前述の転送修飾と同じです。

        ┌───┬───────────┐
        │  FC  │     FC の意味        │
        ├───┼───────────┤
        │  1   │ユーザデータ          │
        │  2   │ユーザコード          │
        │  5   │スーパーバイザデータ  │
        │  6   │スーパーバイザコード  │
        └───┴───────────┘

  ファンクションコードレジスタの値は、特権命令 MOVEC を使って変更するこ

とができます。

        MOVEC.L Rn,DFC          DFC の値を変更する
        MOVEC.L DFC,Rn          DFC の値を取得する
        MOVEC.L Rn,SFC          SFC の値を変更する
        MOVEC.L SFC,Rn          SFC の値を取得する

  ファンクションコードレジスタは、一部の特権命令で機能の範囲を指定するた

めに使用します。ファンクションコードレジスタの設定を必要とする特権命令は

次の通りです。

        MOVES                   アドレス空間を指定して転送する
        PFLUSH/PFLUSHN          ATC を無効化する
        PLPAR/PLPAW             論理アドレスから物理アドレスを求める


● MOVES 命令(Move Address Space)

  MOVES 命令はアドレス空間を明示してデータの転送を行う特権命令です。

        MOVES.bwl Rn,<ea>       Rn を DFC で指定したアドレス空間に転送
        MOVES.bwl <ea>,Rn       SFC で指定したアドレス空間から Rn に転送

  MOVES 命令は MMU とは直接関係ありませんが、MMU が有効な状態で物理アド

レス空間を直接アクセスできる唯一の命令です(DFC/SFC を 3 にして MOVES 命

令でアクセスすると、強制的に MMU のアドレス変換を回避することができます)。

論理アドレス空間にマッピングされていない領域(アドレス変換テーブルなど)

を直接書き換えたい場合などに使います。

  なお、次の命令は挙動に注意する必要があります。

        MOVES.wl An,(An)+
        MOVES.wl An,-(An)

これらの命令ではデスティネーションオペランドでインクリメントまたはデクリ

メントするアドレスレジスタをソースオペランドに指定していますが、メモリに

書き込まれるデータがアドレスレジスタのインクリメントまたはデクリメントの

更新前の値なのか更新後の値なのかが定義されていません。モトローラのマスク

セットでは、68010/68020/68030/68040 では更新後の値が書き込まれ、XC68060

では更新前の値が書き込まれるようです。

・余談

  68030 は FCx 信号線を 7 にして“CPU 空間”を選択することでコプロセッサ

との通信を行っています。68060 には CPU 空間と呼ばれる空間はありませんが、

060turbo では 68060 の TMx 信号線が X68030 のマザーボードの FCx 信号線に

繋がっているので、ファンクションコードを 7 にして MOVES 命令でバスアクセ

スを行うことで 68060 から X68030 のマザーボード上の 68882 の CIR(コプロ

セッサインタフェイスレジスタ)をアクセスすることが可能です。

  しかし、68060 にはコプロセッサという概念が存在しないので、いわゆる“コ

プロセッサ命令”を使用しても 68060 が自動的にコプロセッサをアクセスする

ことはありません。68060 で 68882 を使うには、X68000 にコプロセッサを装着

した場合と同様に、コプロセッサプロトコルをプログラムでエミュレートしなけ

ればなりません。

        ファンクションコードが 7 のときアクセスできる 68882 の CIR
        ┌─────┬───┬──┬─────────────────┐
        │ アドレス │サイズ│R/W │               内容               │
        ├─────┼───┼──┼─────────────────┤
        │$00022000 │ word │R   │レスポンスレジスタ                │
        │$00022002 │ word │W   │コントロールレジスタ              │
        │$00022004 │ word │R   │セーブレジスタ                    │
        │$00022006 │ word │R/W │リストアレジスタ                  │
        │$00022008 │ word │R/W │オペレーションワードレジスタ      │
        │$0002200A │ word │  W │コマンドレジスタ                  │
        │$0002200C │ word │    │(予約)                            │
        │$0002200E │ word │  W │コンディションレジスタ            │
        │$00022010 │ long │R/W │オペランドレジスタ                │
        │$00022014 │ word │R   │レジスタセレクトレジスタ          │
        │$00022016 │ word │    │(予約)                            │
        │$00022018 │ long │  W │インストラクションアドレスレジスタ│
        │$0002201C │ long │R/W │オペランドアドレスレジスタ        │
        └─────┴───┴──┴─────────────────┘

  なお、当然のことですが、060turbo の 68060 モードでは、MOVES 命令を使っ

て 68882 をドライブするよりも、68060 のオンチップ FPU で演算した方が圧倒

的に高速です。


● PFLUSH 命令(Flush ATC Entries)

  PFLUSH は ATC(アドレス変換キャッシュ)を無効化するための特権命令です。

無効化する ATC エントリの選択の仕方によって 4 つのバリエーションがありま

す。

        PFLUSH (An)             An のアドレスを含む ATC を無効化する
        PFLUSHN (An)             〃(ノングローバルエントリに限る)
        PFLUSHA                 すべての ATC を無効化する
        PFLUSHAN                 〃(ノングローバルエントリに限る)

  PFLUSH (An) と PFLUSH (An) は、An を論理アドレスと見なしてその論理アド

レスに該当する ATC を無効化します。ただし、PFLUSHN (An) は、グローバルビ

ットが 1 の ATC を無効化しません。

  PFLUSHA と PFLUSHAN は、すべての ATC を無効化します。ただし、PFLUSHAN

は、グローバルビットが 1 の ATC を無効化しません。

  MMU が有効な状態でアドレス変換テーブルを書き換えたときは、書き換えられ

たデスクリプタに該当する ATC を PFLUSH 命令を使って無効化する必要があり

ます。


● PLPA 命令(PMMU Load Physical Address)

  PLPA は特定の論理アドレスを物理アドレスに変換する特権命令です。指定し

た論理アドレスを読み出しモードでアクセスするか書き込みモードでアクセスす

るかによって、2 つのバリエーションがあります。

        PLPAR (An)
        PLPAW (An)

  いずれも、An を論理アドレスと見なして物理アドレスに変換して An に格納

します。このとき、DFC レジスタが 1 のときはユーザモード、5 のときはスー

パーバイザモードのアドレス変換を行います。

  PLPA 命令の具体的な処理内容は、以下の (1)〜(5) の通りです。

(1) DTTR0 または DTTR1 がヒットしたときは、何もせず、終わり。
                                ____
(2) TC の E ビットが 0、または、MDIS 信号線がアサートされているときは、

    何もせず、終わり。

(3) データ ATC がヒットしたら、それを使って An を物理アドレスに変換して

    更新し、終わり。

(4) アドレス変換テーブルをサーチして、有効なページが見つかったら、データ

    ATC を更新し、それを使って物理アドレスに変換して更新し、終わり。

(5) アクセスエラー。

  非常駐の論理ページに含まれる論理アドレスを変換しようとすると、アクセス

エラー(ページフォルト)になります。

  スーパーバイザプロテクトされている論理ページに含まれる論理アドレスを

DFC=1 で変換しようとすると、アクセスエラー(スーパーバイザプロテクト)に

なります。

  ライトプロテクトされている論理ページに含まれる論理アドレスを PLPAW で

変換しようとすると、アクセスエラー(ライトプロテクト)になります。


━───────────────────────────────────

        目次

────────────────────────────────────
第1回(月刊 117 号)
  <本編>
        はじめに/パイプラインとは/パイプラインの利点/パイプラインの欠
        点/分岐予測/分岐キャッシュを用いた分岐予測/68060 のパイプライ
        ン/68060 の命令フェッチパイプライン/68060 における分岐予測/
        68060 の命令実行パイプライン
  <68060 関連の話題>
        060turbo における SIMM の効果/Motorola のホームページを覗いてみ
        よう/エラッタ/マスクセットの見分けかた/HAS060.X/060pcr5.x
━───────────────────────────────────
第2回(月刊 119 号)
  <本編>
        スーパースカラ(superscalar)/ディスパッチテスト(1)/ディス
        パッチテスト(2)/ディスパッチテスト(3)/ディスパッチテスト
        (4)/ディスパッチテスト(5)/ディスパッチテスト(6)
  <68060 関連の話題>
        XL/Image/060turbo が少し速くなったゾ/mpeg2play.x
  <68060 の命令のスーパースカラ分類表>
        スーパースカラ分類の意味/整数命令/特権命令/浮動小数点命令/参
        考文献
━───────────────────────────────────
第3回(月刊 120 号)
  <本編>
        例外処理/割り込み/例外ハンドラ/例外処理の流れ/ダブルバスフォ
        ルト/例外スタックフレーム/例外ベクタテーブル
  <質問箱>
        データキャッシュが効かない場合のメモリアクセスのクロック数/デー
        タキャッシュの有効な利用方法/SharpenHimemPatch の副作用?
  <68060 関連の話題>
        060turbo.sys v0.54/060turbo の ROM の不具合
━───────────────────────────────────
第4回(月刊 122 号)
  <本編>
        例外スタックフレームの構造/アクセスフォルト
━───────────────────────────────────
第5回(月刊 124 号)
  <本編>
        分岐予測エラー/アドレスエラー/命令による例外
━───────────────────────────────────
第6回(月刊 125 号)
  <本編>
        未実装命令例外
────────────────────────────────────

(EOF)