現在地

アドレスエラー・バスエラー (その4)


カテゴリー:

アドレスエラー・バスエラーについて今度こそ終わりにするつもりです。

MC68040

MC68040からは大きな方向転換があったように感じます。

複雑度は増しているはずなのにスタックに積まれる情報は減っているのです。前にもMC68010の判別(補足)に書きましたが、命令の再開を諦めて頭からやり直す方針のようです。

まずはアドレスエラーの場合です。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SP Status Register
SP+2 Program Counter (H)
Program Counter (L)
SP+6 0010 Vector Offset
SP+8 Address (H)
Address (L)

たった6ワードです。アドレスエラーは命令フェッチのみなので通常これで十分なのでしょうか。

続いてバスエラー(とATC Fault)の場合です。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SP Status Register
SP+2 Program Counter (H)
Program Counter (L)
SP+6 0111 Vector Offset
SP+8 Effective Address(EA)
SP+10
SP+12 Special Status Word(SSW)
SP+14 $00 Write-Back 3 Status(WB3S)
SP+16 $00 Write-Back 2 Status(WB2S)
SP+18 $00 Write-Back 1 Status(WB1S)
SP+20 Fault Address(FA)
SP+22
SP+24 Write-Back 3 Address(WB3A)
SP+26
SP+28 Write-Back 3 Data(WB3D)
SP+30
SP+32 Write-Back 2 Address(WB2A)
SP+34
SP+36 Write-Back 2 Data(WB2D)
SP+38
SP+40 Write-Back 1 Address(WB1A)
SP+42
SP+44 Write-Back 1 Data / Push Data LW0(WB1D/PD0)
SP+46
SP+48 Push Data LW1(PD1)
SP+50
SP+52 Push Data LW2(PD2)
SP+54
SP+56 Push Data LW3(PD3)
SP+58

こちらもMC68020/MC68030の46ワードから30ワードに減っている上に、内部状態の保存というよりもやり残しをソフトウェアに「あと宜しく」と丸投げしているように感じます。

内蔵FPUの超越関数などもそうなのですが、面倒なところはソフトウェアに任せてハードウェアはシンプルにする方針のようです。

MC68020/MC68030でも細部はよくわかりませんでしたが、これはさらにわからないですね。

モニタとしてはこれをそのまま表示して解釈はユーザーに任せることでお茶を濁す手はあります。

MC68060

MC68060ではさらに短くなっています。

アドレスエラー時はMC68040と同じようなので省略して、バスエラーの場合を見てみます。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SP Status Register
SP+2 Program Counter (H)
Program Counter (L)
SP+6 0100 Vector Offset
SP+8 Fault Address(FA)
SP+10
SP+12 Fault Status Longword(FSLW)
SP+14
このフォーマットはFloating-Point Disabled例外でも使われるが、この図はバスエラーでの名称のみ表記している。

MC68040よりさらに短くなっています。これだけで本当に実行継続できるのか疑問なんですが...

一般的な使い方としては仮想記憶のページフォルト時にMMUを切り替えてから再開だからそれには十分ということなのでしょうか。

SCC68070

型番はMC68060の続きみたいですが、世代的にはMC68010に近いですね。MC68000に仮想記憶対応(MC68010とは非互換)と周辺デバイスを追加したような感じです。

アドレスエラー・バスエラー時のスタックには以下が積まれます。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SP Status Register(SR)
SP+2 Program Counter(PCH)
Program Counter(PCL)
SP+6 1111 Vector Offset
SP+8 Special Status Word(SSW)
SP+10 Current Move Multiple Mask(MM)
SP+12 Internal Information
SP+14 Internal Information
SP+16 TPDH
SP+18 TPDL
SP+20 TPFH
SP+22 TPFL
SP+24 DBINH
SP+26 DBINL
SP+28 IR
SP+30 IRC
SP+32 Internal Information

SSWの詳細については省略しますが、MC68010によく似ています。

TPDH/TPDL(データシートではTDPH/TDPLと書かれている箇所も)に書き込み予定のデータが、TPFH/TPFLにアクセス先アドレスがあります。IRに実行中の命令が入っているあたりはMC68000っぽいですね。

以上、4回にわたってアドレスエラー・バスエラーを見てきました。普段のプログラミングではまず見ないところで、必要になるのは仮想記憶を実装しようとしているか、デバッグ用のエラー表示くらいでしょうか。

前者の機会はまずなさそうですが、Universal Monitorへの表示はMC68020, MC68030, SCC68070については順次追加していく予定です。これらは現物持っていますので、ボードも作るかもしれません。

参考文献・関連図書: 
”M68040 User's Manual”, Motorola.
"M68060 User's Manual", Motorola.
SCC68070データシート, Philips Components.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。