[index > X68kの読み物や資料の部屋]

0x0Excel導入キ

まきお氏作の、X68000ツインタワー機(初代を除く)に040または060を載せるアクセラレータ 「0x0Excel」の情報ページです。どうも情報が見つからないので(探し方が悪い?)、 自分の持っている情報をWeb上で提供することにしました。


セットアップ方法

ソフトウェアのセットアップ方法です。ハードウェアのセットアップについては まきお氏のページを参照してください。

  1. FD起動する方はSWITCH.Xで起動デバイスをSTDまたはFD0に変更します。
  2. SRAMを他の用途に使っていないことを確認してからSRAMPATCH.xを実行し、 SRAMに0x0Excel対応ルーチンを書き込みます。この後SWITCH.Xで起動デバイスを変更してはいけません。
  3. CONFIG.SYSを書き換え、最初にJdash.sysを組み込むようにします(DEVICE=Jdash.sys)。
  4. COMMAND.Xを付属のもの(Command version 3.00 + JX0.51)に差し替えます。 こまんどーなどを使っている方は、AUTOEXEC.BATなどの修正が必要になることがあります。
  5. 68040の方はCONFIG.SYSまたはAUTOEXEC.BATからfpsp.xを、68060の方は060sp.xを常駐させるようにします。
  6. リセット。

GOVERHDでSCSI HDD上のIPL・SCHDISKを書き換えている場合、 最悪HDDをフォーマットし直して、さらにFD起動で運用することになるかもしれません (susieでHDDを認識させる場合はCONFIG.SYSにSCSIDEV=OFFの1行を加えてください)。

[戻る]


ハードウェアについて

利用できる石

MPU
68040/68LC040の25〜40MHz版、および68060/68LC060の50MHz版(?)を使用できます。 68EC040/68EC060はソフトが対応していないため使用できません。
オシレータ
80MHzまで動くものの、個体差があるので75MHz程度に押さえると安心だそうです。
メモリ
PC100 SDRAM CL=2の64MBまたは128MBのものを使用できます。 PC133 CL=3のものも使えるかもしれません。

メモリマップ(推測)

00000000〜001fffff(物理アドレス、以下同じ)
00200000〜00bfffff
01000000〜SDRAMの末尾まで
細かいこと(気にするな…)

その他

I/Oポートとかの資料が出ていないので不審に思っていたのですが、まきお氏に伺ったところ、 ハードウェアについて付属のマニュアル以外には特に書くようなことはないのだそうです。

当然ながら、Jupiter-XにあったXRAM/VRAMに対するアーリーライトモードなどは存在しません。

[戻る]


ソフトウェアについて

互換モードと拡張モード

現在、拡張モードは動きません。eramdisk.sysでRAMディスクにでもしてください。

MPUのキャッシュ等の用語について

スーパースケーラ(スーパースカラ) superscaler

命令実行パイプライン(またはその一部)を2組以上持つ技術で、 依存性を持たない2命令以上を同時に実行でき、 その場合1命令当たりの所要クロック数は見かけ上1クロックを下回ります。 2組の場合は「2ウェイスーパースケーラ 2-way superscaler」と呼ばれます。

スーパースケーラのウェイ数をどのように表現するかはメーカーや製品により異なり、 整数命令実行部のみを数えたり、 実際に同時実行される平均の命令数をシミュレーションで算出したり(?)するようです。

060のスーパースケーラは最大で2つの整数命令または1つの整数命令と1つの浮動小数点命令を同時に実行でき、 また依存性があっても同時に実行できる命令の組も存在していて、 特に何もしなくても結構速いらしいです。

040では採用されていません。

ブランチキャッシュ(分岐キャッシュ) branch cache

過去に実行した分岐の結果を記憶しておき、 次にその分岐命令が実行されたときにパイプラインが乱れないようにする技術 (分岐予測と呼ばれる技術の一種)です。 実行される分岐命令に局所性があり(特定のアドレスの分岐命令が頻繁に実行され)、 その結果には偏りがある(特定の方向へ分岐しがちである)という経験則に基づいていて、 特にループで効果を発揮します。

060では分岐キャッシュがヒットした場合には分岐命令は命令実行パイプラインに入る前に除去されるため、 見かけ上最短0クロックで実行されます。

040では採用されていません。

ストアバッファ store buffer

ロングワードに満たないサイズでの、連続するアドレスへのストア(書き出し)を遅延し、 メモリにはまとめてストアする機構です。

060では32ビット幅のバッファが4つあり、ライトスルーまたはキャッシュ禁止・ ストアバッファ許可(ノンシリアライズド)領域に対して作用します。

040では採用されていません。

命令、データキャッシュ instruction / data cache

メモリアクセスには局所性があるという経験則に基づく、 メモリからロード(読み出)した命令やデータを格納しておく高速・小容量のメモリ。

メモリは1つなのにキャッシュは命令とデータに分かれているのは、 キャッシュが1つだと命令のロードとデータのロードあるいはストア (書き出し)が同時に発生した場合にどちらか一方のアクセスを遅らせなければならないため。

最近は、メモリとプロセッサの速度が違いすぎるのと、 高速なメモリほど高価であることから多段構成のキャッシュが採られることが多い。 なお、プロセッサ(実行ユニット)に近い方から順にL1(Level 1)キャッシュ(1次キャッシュ)、 L2(2次)キャッシュ…と呼ばれる。

040では命令キャッシュとデータキャッシュがそれぞれ4kB、060ではそれぞれ8kBあり、 どちらも4ウェイセットアソシエイティブ方式、16バイト/ラインで構成されています。 ウェイ当たりのライン数は040は64ライン、060は128ラインです。

040、060共2次キャッシュはありません。 MPUの外部にキャッシュメモリを接続した場合はそれが2次キャッシュということになります。

040は仮想インデックス物理タグキャッシュで、 リプレースメントは疑似乱数によるランダム置換です。

MMUのページの設定時の用語について

コピーバック(ライトバック、ストアバック、スワップ) copy back (write back, store back, swap)

ストア(書き出し)をキャッシュにのみ行い、メモリへのストアは後で行う方式。 ライトスルーよりも高速なストアが可能。

040ではストア時にキャッシュミスが起こるとメモリからデータを読み出してキャッシュを更新します (030のライトアロケート write allocateと同様の処理です)。

ライトスルー(ストアスルー、ストアイミディエイト) write through (store through, store immediate)

ストア(書き出し)時にキャッシュとメモリの両方を更新する方式。 キャッシュミス時にキャッシュを更新する方式はライトアロケートと呼ばれる。

060ではストア時にストアバッファが働きます。

040はライトアロケートはサポートしていませんが、 030はライトスルーとライトアロケートを両方ともサポートしています (CACRレジスタで排他的に指定します)。

キャッシュ禁止、ノンシリアライズド non-serialized

メモリからのロード(読み込み)、ストア(書き出し)の順序をプログラムのロード、 ストア順とは無関係に(プロセッサ内部の都合に合わせた順序で)行う方式。 シリアライズドよりも高速。

X68kではVRAMは通常これで構いません (画像取り込み時にまずいかもしれませんが環境がないため不明)。

060ではストアバッファ許可と呼ばれ、ストア時にストアバッファが働きます。

キャッシュ禁止、シリアライズド serialized

メモリからのロード(読み込み)、ストア(書き出し)の順序をプログラムのロード、 ストア順と同じにする方式。 I/Oポートへのアクセスはこれでないとハードウェアの動作が変わってしまうことが多い。

060ではストアバッファ禁止と呼ばれます。

ライトプロテクト write protected

該当ページに対する書き込みを禁止し、アクセスフォルト例外を発生させます。

スーパーバイザ supervisor

該当ページに対するユーザーモードでのアクセスを禁止し、アクセスフォルト例外を発生させます。

ソフトウェア対応表

手元で動作確認したうち、キャッシュオン、コピーバックでは動かないものは以下の通りです。

ゲームについては以下の通りです。

情報をお持ちの方はmorまでご連絡ください。 (書籍『X68/040turbo』の巻末に載っているリストは今後できる範囲でチェックし反映していくつもりです)

[戻る]


プログラマ向けの資料

0x0Excel対応ソフトを書くための注意事項などを掲載する予定です。 ただ、私が040ユーザーなので、060に関してはかなり貧弱になると思います。

キャッシュフラッシュ(プッシュ)について

IOCSコール_SYS_STAT($AC)のモード3を用いてフラッシュ(プッシュ)します。

0x0Excel専用であればスーパーバイザモードになってCPUSHしてもかまいませんが、 CPUSH(やCINV)は020/030にはない命令で(その代わりにCACRを操作します)、 さらに、CPUSHL, CPUSHP, CINVL, CINVP命令には物理アドレスを与える必要があるので、 システムに密接に絡むソフトウェア以外では使うべきではありません。

IOCSコール_SYS_STATについて

普通に使えばOKです。 当然ながら、040SYSpatch・Jupiter.X拡張コールを使う場合は事前に常駐チェックすべきです。

なお、68000機ではこのIOCSコールはサポートされないので (使うと白帯って「エラー($01AC)が発生しました」です)、 事前に$0cbc(1バイト)に格納されているMPU種別(680x0のxの部分の数値が格納されています)が 2(68020)以上であることを確認してください。

68000から拡張された命令について

作成途中です。待てない方(いるのか?)はモトローラのサイトからM68000PM.pdfなどをダウンロードしてください。

著作権はモトローラなど関係者が押さえています(拙訳なので翻訳関係などはpublic domainです)。

ユーザーモードで使える命令

MOVE16(040〜)

スーパーバイザモードで使える命令

拡張されたアドレッシングモード

スーパーバイザプログラミングモデル

オンチップキャッシュ

オンチップMMU

例外処理

MPUブロック

040な最適化のキホン技

68000や68030、68060との相違点

(準備中)

[戻る]


関連サイト

リンクページの該当部へジャンプします。

[戻る]


参考文献

(敬称略)

[戻る]


[index > X68kの読み物や資料の部屋]

Written by mor.

Last updated : 2003.1.23(Thu).