So-net無料ブログ作成

例外ベクタを調べた (4) [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

例外ベクタ・テーブルは、ROM (0x00000000) または RAM (0x20000000) にしか存在し得ないということが分かっています。 さすがに、 32K バイトの RAM には、 1K バイトも必要なベクタ・テーブルは置かないだろうと思っていましたが。 あれっ? RAM にも例外ベクタ・テーブルみたいなものがありますよ。

CPUに直結したシステム例外

システム例外ベクタ・テーブルらしきものは、 0x2000000 から 0x200000FF までの 256 バイトに存在します。

20000000  20 00 80 00 00 00 04 18   .......
20000008  00 01 15 f0 00 01 15 f0  ........
20000010  00 01 15 f0 ff ff ff ff  ........
20000018  ff ff ff ff ff ff ff ff  ........
20000020  00 01 15 f0 00 01 15 f0  ........
20000028  00 01 15 f0 00 01 15 f0  ........
20000030  00 01 15 f0 ff ff ff ff  ........
20000038  00 01 15 f0 00 01 15 f0  ........
20000040  ff ff ff ff ff ff ff ff  ........
20000048  ff ff ff ff ff ff ff ff  ........
20000050  ff ff ff ff ff ff ff ff  ........
20000058  ff ff ff ff ff ff ff ff  ........
20000060  ff ff ff ff 00 01 15 e0  ........
20000068  00 01 15 e0 00 01 15 e0  ........
20000070  00 01 15 e0 00 01 15 e0  ........
20000078  00 01 15 e0 00 01 15 e0  ........
20000080  00 01 15 f0 00 01 15 f0  ........
20000088  00 01 15 f0 00 01 15 f0  ........
20000090  00 01 15 f0 00 01 15 f0  ........
20000098  00 01 15 f0 00 01 15 f0  ........
200000a0  00 01 15 f0 00 01 15 f0  ........
200000a8  00 01 15 f0 00 01 15 f0  ........
200000b0  00 01 15 f0 00 01 15 f0  ........
200000b8  00 01 15 f0 00 01 15 f0  ........
200000c0  ff ff ff ff ff ff ff ff  ........
200000c8  ff ff ff ff ff ff ff ff  ........
200000d0  ff ff ff ff ff ff ff ff  ........
200000d8  ff ff ff ff ff ff ff ff  ........
200000e0  ff ff ff ff ff ff ff ff  ........
200000e8  ff ff ff ff ff ff ff ff  ........
200000f0  ff ff ff ff ff ff ff ff  ........
200000f8  00 1f e8 ** ** ** 00 00  ...***..

これは、完全に ROM (0x00000000 - 0x000000FF) の内容をコピーしてきたものです。 もし、 ROM ではなく、 RAM が例外ベクタ・テーブルとして使用されているのであれば、 SilentCから書き換える事だってできますね。

割り込みコントローラ0が発行する例外

割り込みコントローラ0に関連したベクタ・テーブルらしきものは、 0x2000100 から 0x200001FF までの 256 バイトに存在します。

20000100  00 01 15 e0 00 01 15 e0  ........
20000108  00 01 15 e0 00 01 15 e0  ........
20000110  00 01 15 e0 00 01 15 e0  ........
20000118  00 01 15 e0 00 01 15 e0  ........
20000120  00 01 15 e0 00 01 15 e0  ........
20000128  00 01 15 e0 00 01 15 e0  ........
20000130  00 01 15 e0 00 00 08 a4  ........
20000138  00 01 15 e0 00 01 15 e0  ........
20000140  00 01 15 e0 00 01 15 e0  ........
20000148  00 01 15 e0 00 01 15 e0  ........
20000150  00 01 15 e0 00 01 15 e0  ........
20000158  00 01 15 e0 00 00 33 78  ......3x
20000160  00 00 33 b0 00 00 32 c0  ..3...2.
20000168  00 00 32 d0 00 00 31 e4  ..2...1.
20000170  00 00 32 e0 00 00 32 f0  ..2...2.
20000178  00 00 33 00 00 00 33 10  ..3...3.
20000180  00 00 33 38 00 00 33 48  ..38..3H
20000188  00 00 33 58 00 00 33 68  ..3X..3h
20000190  00 00 31 d4 00 01 15 e0  ..1.....
20000198  00 01 15 e0 00 01 15 e0  ........
200001a0  00 01 15 e0 00 01 15 e0  ........
200001a8  00 01 15 e0 00 01 15 e0  ........
200001b0  00 01 15 e0 00 01 15 e0  ........
200001b8  00 01 15 e0 00 01 15 e0  ........
200001c0  00 01 15 e0 00 01 15 e0  ........
200001c8  00 01 15 e0 00 01 15 e0  ........
200001d0  00 01 15 e0 00 01 15 e0  ........
200001d8  00 01 15 e0 00 00 18 78  .......x
200001e0  00 01 15 e0 00 01 15 e0  ........
200001e8  00 01 15 e0 00 01 15 e0  ........
200001f0  00 01 15 e0 00 01 15 e0  ........
200001f8  00 01 15 e0 00 01 15 e0  ........

これも、完全に ROM (0x00000100 - 0x000001FF) の内容をコピーしてきたものです。

割り込みコントローラ1が発行する例外

割り込みコントローラ1に関連したベクタ・テーブルらしきものは、 0x2000200 から 0x200002FF までの 256 バイトに存在します。

20000200  00 01 15 e0 00 01 15 e0  ........
20000208  00 01 15 e0 00 01 15 e0  ........
20000210  00 01 15 e0 00 01 15 e0  ........
20000218  00 01 15 e0 00 01 15 e0  ........
20000220  00 01 15 e0 00 01 15 e0  ........
20000228  00 01 15 e0 00 01 15 e0  ........
20000230  00 01 15 e0 00 01 15 e0  ........
20000238  00 01 15 e0 00 01 15 e0  ........
20000240  00 01 15 e0 00 01 15 e0  ........
20000248  00 01 15 e0 00 01 15 e0  ........
20000250  00 01 15 e0 00 01 15 e0  ........
20000258  00 01 15 e0 00 01 15 e0  ........
20000260  00 01 15 e0 00 01 15 e0  ........
20000268  00 01 15 e0 00 01 15 e0  ........
20000270  00 01 15 e0 00 01 15 e0  ........
20000278  00 01 15 e0 00 01 15 e0  ........
20000280  00 01 15 e0 00 01 15 e0  ........
20000288  00 01 15 e0 00 01 15 e0  ........
20000290  00 01 15 e0 00 01 15 e0  ........
20000298  00 01 15 e0 00 01 15 e0  ........
200002a0  00 01 15 e0 00 01 15 e0  ........
200002a8  00 01 15 e0 00 01 15 e0  ........
200002b0  00 01 15 e0 00 01 15 e0  ........
200002b8  00 01 15 e0 00 01 15 e0  ........
200002c0  00 01 15 e0 00 01 15 e0  ........
200002c8  00 01 15 e0 00 01 15 e0  ........
200002d0  00 01 15 e0 00 01 15 e0  ........
200002d8  00 01 15 e0 00 01 15 e0  ........
200002e0  00 01 15 e0 00 01 15 e0  ........
200002e8  00 01 15 e0 00 01 15 e0  ........
200002f0  00 01 15 e0 00 01 15 e0  ........
200002f8  00 01 15 e0 00 01 15 e0  ........

みごとに全てのベクタが「その他の例外処理ルーチン」を使用しています。 この部分は、 ROM (0x00000200 - 0x000002FF) の内容とは違っていますね。

ベクタだけが割り当てられた例外

ColdFire は、全部で 256 の例外ベクタを持ちます。 最後の64個のベクタは、ベクタ・テーブルとして確保はされていますが、MCF52233では、全く使われていないベクタです。

20000300  00 01 15 e0 00 01 15 e0  ........
20000308  00 01 15 e0 00 01 15 e0  ........
20000310  00 01 15 e0 00 01 15 e0  ........
20000318  00 01 15 e0 00 01 15 e0  ........
20000320  00 01 15 e0 00 01 15 e0  ........
20000328  00 01 15 e0 00 01 15 e0  ........
20000330  00 01 15 e0 00 01 15 e0  ........
20000338  00 01 15 e0 00 01 15 e0  ........
20000340  00 01 15 e0 00 01 15 e0  ........
20000348  00 01 15 e0 00 01 15 e0  ........
20000350  00 01 15 e0 00 01 15 e0  ........
20000358  00 01 15 e0 00 01 15 e0  ........
20000360  00 01 15 e0 00 01 15 e0  ........
20000368  00 01 15 e0 00 01 15 e0  ........
20000370  00 01 15 e0 00 01 15 e0  ........
20000378  00 01 15 e0 00 01 15 e0  ........
20000380  00 01 15 e0 00 01 15 e0  ........
20000388  00 01 15 e0 00 01 15 e0  ........
20000390  00 01 15 e0 00 01 15 e0  ........
20000398  00 01 15 e0 00 01 15 e0  ........
200003a0  00 01 15 e0 00 01 15 e0  ........
200003a8  00 01 15 e0 00 01 15 e0  ........
200003b0  00 01 15 e0 00 01 15 e0  ........
200003b8  00 01 15 e0 00 01 15 e0  ........
200003c0  00 01 15 e0 00 01 15 e0  ........
200003c8  00 01 15 e0 00 01 15 e0  ........
200003d0  00 01 15 e0 00 01 15 e0  ........
200003d8  00 01 15 e0 00 01 15 e0  ........
200003e0  00 01 15 e0 00 01 15 e0  ........
200003e8  00 01 15 e0 00 01 15 e0  ........
200003f0  00 01 15 e0 00 01 15 e0  ........
200003f8  00 01 15 e0 00 01 15 e0  ........

この部分も全てのベクタが「その他の例外処理ルーチン」を使用しています。

RAMにも、例外ベクタ・テーブルのような構造があることが分かりましたが、これが使われているのかどうかは定かではありません。 ROMの例外ベクタ・テーブルを書き換えるのは、大変ですが、RAMにあれば簡単に書き換えられます。 いっちょ、実験してみるか。

つづく

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。