現在地

MC68000系のメモリ事情(その2:MC68010)


カテゴリー:

MC68010の前にMC68008について書いておきましょう。

Intelの8088に対抗して小規模向けに作られたのがMC68008です。データバスが8ビット、アドレスバスが20ビットに縮小されています。メモリ空間は1MBとなります。

アドレスは内部32ビットのうち必要な分を外部に引き出しているだけなのでメモリ空間のサイズが変わってもソフトウェアでの扱いは変わりません。

これで不足するなら素直にMC68000を使えということです。

それでは本題のMC68010を見ていきましょう。

ハードウェア的にはMC68000と互換でそのまま挿し換えもできます。当然バス幅にも変更はなく、メモリ空間も16MBのままです。ソフトウェア的にはさまざまな改良点がありますが、メモリに関するものには次のようなものがあります。

  1. Function Codeを自由に設定してメモリアクセスが可能になりました。もちろんSupervisor Modeでのみ実行可能な特権命令です。
  2. バスエラーになったアクセスを再実行して「再開」できるようになりました。
  3. アドレス0からに固定されていた例外ベクタが移動可能になりました。

1でOSからユーザメモリへのアクセスが可能にななったこと、2で仮想記憶が使えるようになったこと、これらから汎用マシンとして使いやすくなったはずですが残念ながらあまり採用例を聞きません。同じ再設計の手間をかけるならMC68020に移行した方がパフォーマンス的にも有利という判断なのかもしれません。

あまり知られていませんがMC68012というものもありました。

MC68010のパッケージを84ピンのPGAにすることでアドレスバスを7ビット増やしてメモリ空間を2GBに拡張したものです。他にRead-Modify-Writeサイクルであることを示すRMCが増え、GNDが2ピン増やされています。

不思議なのは増えたアドレスでなぜかA24A29, A31となっています。

以前読んだ本にはアドレスバスはA1A30と書かれたものがあって信じていたのですが、今回データシートを確認して初めてA30が飛んでいる事実を知りました。

何か理由があるのでしょうがよくわかりませんね。

MC68000で未使用だったアドレスのビット24以上が有効になったので、前回書いたアドレスの上位を利用しているソフトウェアには影響が出てしまいました。

そういうトリッキーなソフトウェア以外はアドレス範囲の定数を変更するなどの簡単な修正で対応可能です。やれメモリモデルだ、プロテクトモードだといった変更は必要ありません。

一つ書き忘れていたことがありました。

8086では奇数アドレスから16ビット幅のデータを読み書きすることが可能(8ビットずつ2回のアクセスになる)でしたが、MC68000~MC68012ではこれはできずアドレスエラー例外が発生します。データバス8ビットのMC68008ではできても良さそうなのですがやはり例外が発生します。

例外処理中に再度アドレスエラー(かバスエラー)が発生すると実行継続不能ということで停止し、リセット以外では復帰できなくなります。これをDouble Bus Faultと呼びます。証拠があまり残らないのでこれのデバッグは悪夢です。

速度を考えたら奇数アドレスに置くべきではないのでたいした問題ではありませんが。

参考文献・関連図書: 
『M68000マイクロプロセッサ ユーザーズ・マニュアル』, 4th edition, CQ出版社.
MC68010/MC68012データシート, Motorola.
辰野功(1987)『実践的システム設計のための68020ファミリ活用の実際』電波新聞社.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。