2015年1月12日の日記の2番目の記事へのコメント

基板

キンドラを電池レス対応させたら不正な命令を実行したとかで固まりまくる問題、やはり掛け算が怪しい感じです。ひとまず掛け算結果の下位16bitだけをデータレジスタに読み出している部分が問題なのかどうかを切り分けるべく、掛け算結果を上下逆に読み出してSWAPする部分をレジスタごとにサブルーチンとして未使用領域に定義し、オリジナルの掛け算結果の読み出し部分をJSRに書き換えて定義したサブルーチンに飛ぶようにして動かしてみました。結果、見事不正な命令を実行して止まる現象が発生。掛け算の結果を下位16bitしか読んでないからまずいとか、そんなのではなさそうですな・・・。

そこで、次に非電池レスの状態で、掛け算の結果読み出し部分だけサブルーチン化してみたところ、何とこちらでも不正な命令を実行して止まることが判明。ということは、掛け算の結果読み出し部分を書き換えること自体に問題があるということか。それでは、一体どの掛け算に問題があるのか・・・。一旦オリジナルの状態に戻した上で、1つ1つ、掛け算結果読み出しをサブルーチン呼び出しに置き換えてはプレーを繰り返したところ・・・ついに書き換えることによって不正な命令に繋がる掛け算結果読み出しを発見。

一体なぜここを書き換えるとエラーになるのか。さっそくコードを追うべく、break pointを設定・・・したつもりが、間違えてwatch pointを設定しており、それに気付かず実行した結果、答えが判明してしまいました。問題となっている掛け算結果の読み出し処理のすぐ後に、掛け算結果の読み出し命令の一部をデータとして読み出している部分がありました。よく見ると、命令やアクセス先のレジスタが書き換えられていないかをきっちりチェックしているようです。なるほど、プロテクト解除対策が施されていたってわけね・・・。

そうとわかれば話は簡単。計算結果を揃えるのは面倒なので、分岐前の比較処理を変更して、必ず変更がない状態と同じ分岐をするように手直し。ようやく不正な命令に飛ばなくなりました。それにしても、この問題、1面クリアするまで解らないのが恐ろしいです。一体今日だけで何回1面をクリアしたことかw。後は最後まで遊べるかですねー。その辺はまた日を改めて実験しましょう。

お名前:  メールアドレス(省略可):
メールアドレスも表示されます
ここに名前その他を書いてはいけません: ここにメールアドレスその他を書いてはいけません:

2015年1月12日の日記の2番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2015年1月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ