V60ボード(ソフトウェア編 その2)
動かなくて悩んでいた例外処理ですが、わかってみれば簡単なことでした。
例外関係をもう一度始めから実装しなおしてみました。今度は一歩ずつ確認しながら進めていったのですが、やはり変です。デバッグ用にストア命令を追加したりするととたんに動作が変わってしまいます。
MOV R0,/0F80H
などとしてメモリに書きます。EMILY Boardではプロセッサの状態にかかわらずメモリを読めますのでこれで十分です。
どう考えても関係なさそうなところを変更しても影響が出ます。
なにか重大な勘違いをしているのではとリファレンスマニュアルを読み直していると……
割込・例外のハンドラはワード境界になければならないと書かれているではないですか。
ハンドラは後ろの方にあるので変更のたびにアドレスがずれてこの条件を満たしたり満たさなかったりしたようです。各ハンドラの前にALIGN 4
を追加したところ安定して動作するようになりました。