2011年7月3日の日記の1番目の記事へのコメント
■バース電池レス化
昨日作ったバースのROMを実際に動かしてみました.いきなり実機でやる前に,まずはエミュレーター上で・・・って,何かいきなりレジスタへの不正なアクセスがあったとかいうメッセージが出るぞ (;´Д`)
逆アセンブル結果を見返してもアドレスの入れ替えが間違っているようには見えません.問題となっているのは,掛け算を利用したプロテクションの部分なんですが,ここでは単に掛け算結果の上位16bitを読んでるだけだしなぁ.このレジスタは,電池が生きてる間は0x148番地で,電池が切れると0x146番地に移動するんで,単純にアドレスを書き換えてやればいいはずなんですが・・・って,上位16bitを読んでるはずなのに,move.lで読んだ値をadd.wしてるじゃん!
68000はビッグエンディアンなので,add.wされるのは,電池切れする前の場合,0x148番地ではなく0x14a番地から読んだ値ということに・・・.電池切れする前の0x14a番地は,掛け算の結果の下位16bitを読み出すレジスタ.このレジスタは,電池切れすると0x144番地に移ります.つまり,ここでは本来読みたいレジスタと全然違うレジスタを読んじゃってることになりますね.
・・・いやしかし,これでも普通に動いているように見えるなw.読んでるだけで使ってないのかな? とりあえず 0x144番地からmove.wするように書き換えて対処.上位と下位の両方を読まなければならないハードウェア仕様的な制約があったりすると厄介ですが,その辺どうなんだろうなぁ・・・? まあとにかく,これでエミュレーターでエラーは出なくなりました.
続いて実機で動かしてみます.うちにあるバースはプログラムROMが4Mbit x 2の構成.修正箇所は両方に存在しているため,両方とも差し替える必要があります.というわけでROMを2個焼いて,CボードをPANG!3のものと交換してみました.
スイッチオン!・・・キタ━━━━(゜∀゜)━━━━ッ!!
とりあえずそれっぽい絵が出て動いています.まずは成功といったところでしょうか.
クレジットつぎ込んでエンディングまで確認しようかと思ったんですが・・・このゲーム,戻り復活なんですね・・・.23面あたりで挫けて一旦終了 _|‾|○.遊んだ範囲では怪しいところはなかったかな? 赤い網みたいなのが出てくるところで,網が地上物のように見えたけど (地上物だと思って重なろうとして何回か激突死したw),あれは単に元々絵がアレだからなのかな・・・.
[コメントを書く]
2011年7月3日の日記の1番目の記事へのコメント
なってました.
何か自分で間違えて命令部分まで書き換えちゃってたみたいですorz