現在地

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


3回目は残りですが書ききれるかなぁ。さらに1回増えてしまうかもしれません。

ここからは自分の手で動かしたことはないのでマニュアルを元にざっくり書いていきます。

MC68020 / MC68030

この両者はソフトウェアから見た例外処理はほぼ共通のようなのでまとめて書きます。

これらではエラー発生時の状況によってスタックに積まれる情報量に違いがあるようです。キリの悪いところで発生すると保存しないといけない項目が増えるということなのかな。

どちらが使われたかはSP+6の上位4ビットでわかります。

この4ビットでどのフォーマットかはわかりますが、それが何ワードなのかは書かれていません。
Universal MonitorではこれまでMC68010までの対応だったので0000なら4ワード、それ以外なら29ワードとしていました。それをMC68020以降で実行するとスタックがおかしなことになります。今回MC68010, MC68020, MC68030, MC68040, MC68060, SCC68070で使われているフォーマットとその長さをテーブルにして引くようにしました。

まずは少ない場合から。

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 1010 Vector Offset
Internal Register
SP+10 Special Status Word
SP+12 Instruction Pipe Stage C
SP+14 Instruction Pipe Stage B
SP+16 Data Cycle Fault Address (H)
Data Cycle Fault Address (L)
Internal Register
Internal Register
SP+24 Data Output Buffer (H)
Data Output Buffer (L)
Internal Register
Internal Register

この短いフォーマットになる条件として"Execution Unit at Instruction Boundary"とあるので、実行が終わって結果の書き込みに失敗したか、フェッチに失敗して実行開始前のいずれかではないかと思います。Data Output Bufferしかないのもそのためかと。

次は多い場合です。

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 1011 Vector Offset
Internal Register
SP+10 Special Status Register
SP+12 Instruction Pipe Stage C
SP+14 Instruction Pipe Stage B
SP+16 Data Cycle Fault Address (H)
Data Cycle Fault Address (L)
Internal Register
Internal Register
SP+24 Data Output Buffer (H)
Data Output Buffer (L)
 
Internal Register, 4 Words
 
SP+36 Stage B Address (H)
Stage B Address (L)
 
Internal Register, 2 Words
 
SP+44 Data Input Buffer (H)
Data Input Buffer (L)
 
Internal Register, 3 Words
 
SP+54 Version # Internal Information
 
Internal Register, 18 Words
 

こちらは何と46ワード(92バイト)もあります。実はM68000ファミリの中でこれが最大です。

Special Status Word(以下SSW)もMC68010とは全くの別物です。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FC FB RC RB 0 0 0 DF RM RW SIZE 0 FC2 - FC0

どうやら複数のエラーが同時に発生することもあるようです。

FC,FBはそれぞれ命令パイプのStage C, Stage Bでエラーが発生したこと、RC,RBはそれを再実行する必要があるかどうか、DFデータエラーが発生したこと(と再実行が必要か)を示します。ソフトウェアで処理した(ハードウェアでの再実行は不要)時は対応するRC,RB,DFを0にします。

命令フェッチは失敗しても(分岐によって使わない可能性もあるので)実際に必要になるまでは保留されています。命令フェッチのアドレスなどはどこにも無いけれどどうやって知るのでしょう? PCから逆算するのかな。

ビット8~0はデータアクセスに関連するもので、RM,RW,FC2-FC0はMC68010と一緒ですね。バス幅が広くなったのでサイズ情報は2ビットになりました。

とユーザーズ・マニュアルを元に書いてきましたが、細部がよくわからないですね。例外処理の章だけを摘み読みしたためで全体を読み込めばわかるのかな。実際に現物を動かしてみるのが早そうですが、このクラスともなるとたとえEMILY Boardを使うにしても大変そうです。

仮にUniversal Monitorで表示するとしたら、命令フェッチについてはStage B, Stage Cでエラーがあったこと(FC, FB)だけ表示することになるでしょう。データについてはMC68010と同程度の表示はできると思います。いずれにしてもボードを作らないことには手が出せません。

案の定長くなってきてしまいました。次回に続きます。

2022-12-06 追記:
日本語版の『MC68020 ユーザーズ・マニュアル 2nd Edition』を確認したらショートフォーマットの場合はStage BのアドレスはPC+4、Stage CはPC+2、ロングフォーマットの場合はStage BはSP+36のStage B Address、Stage CはStage B Address -2だそうです。

日本語版は省略されていることがあるので英語版メインで読んでいたのですが...
さらにMC68020の2nd EditionよりMC68020,MC68EC020のFirst Editionの方が新しいのでややこしい。

参考文献・関連図書: 
『MC68020 ユーザーズ・マニュアル 2nd Edition』, CQ出版社.
”MC68020, MC68EC020 Microprocessors User's Manual First Edition”, Motorola.
”MC68030 Enhanced 32-Bit Microprocessor User's Manual Third Edition”, Motorola.

コメントを追加

Plain text

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