例外ベクタを調べた (4) [ColdFire V2]
例外ベクタ・テーブルは、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月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
コメント 0