2011年10月19日から2011年10月15日までの日記を表示中
2011年10月19日 (水)
■スパIIX 電池レス化
あまりにもデモで落ちる箇所が多く,デバッガでトレースを取って命令を遡って原因を探すのが非常にしんどい感じです.もっと楽にやる方法はないかと考えていたところで,ドイさんの発言により,以前にMAME内部でのメモリアクセスにフックをかけて,どこのアドレスにどんなアクセスがあったかを記録する仕掛けを作りかけていたことを思い出しました (元々はCPS1の電池レス化のために作った).これを完成させれば,エミュレーターで実行した範囲は完璧に命令とデータを分けられるはず・・・.
というわけで,早速以前の残骸を発掘して完成させてみることに.プログラムROMは高々先頭4MByteだけなので,4M要素の配列を静的に確保しておき,ROMの読み出しが発生したら,そこに命令として読まれたかデータとして読まれたかの情報を書き込みます.で,エミュレーターの終了時やシグナルを受けた際に,この配列の内容をファイルに書き出して利用する感じ.トレースのログみたいにアクセスの順番を残す必要は一切ないので,情報としてはひとまずこれで十分でしょう.
問題は,どうやってROMの読み出し時に処理を割り込ませるかなんですが・・・.当初,CPS2のハードウェア定義の方で,先頭4MByteのアドレス空間に対して,読み出し時に呼ばれるハンドラを登録しようとしたんですが,CPS2のように暗号化したままのROMと復号化した状態のROMの両方を使うようなプログラムの場合,後々復号化処理のための領域の登録ができなくなるようで,これはうまくいきませんでした.
そこで,上品にやるのは諦め,68000のCPUエミュレーターの方のソースに手を突っ込み,メモリアクセスする部分にこの処理を割り込ませてやったところ,こっちは成功.無事データと命令の読み出しを区別して,記録できる状態となりました.
というわけで,これを利用して,通常版でデモを延々回した際のアクセス状況を取得し,現在の電池レス化版のROMの暗号化・復号化範囲と照らし合わせたところ,見事に漏れや間違いがボロボロと・・・.いやー,まだこんなにあったのか・・・.
この辺を必死に直してやったところ,エミュレーター上でデモが落ちなくなったので,いよいよ実機で動かしてみることにします.動かすためには4MbitのROMを6個も焼かないとだめなんですよね・・・.まあ,1回焼いちゃえば,1個目以外は殆ど焼き直すことないとは思いますが・・・.
さて,どうなるか・・・キタ━━━━(゜∀゜)━━━━ッ!!
無事実機で電池レス版が動きました.
とりあえずデモに関しては落ちないですね.クレジット入れて遊ぼうとしたら即リセットがかかりましたがw.いやー,ここまで長かったなぁw
[コメントを書く]
2011年10月18日 (火)
■スパIIX 電池レス化
ようやくデモの3周目 (バイソンが出てくるあたり) まで進むようになりました.その他,dis.xの出力から分岐命令を抜き出して,分岐先がデータになっている部分を探して潰したりと,あの手この手でちまちま間違いを探しては潰しています.しかしこんな状態じゃまともになるまでまだまだかかりそうだなぁ.
[コメントを書く]
2011年10月17日 (月)
■荷物
ものすごいでっかい箱が届きましたw (手前のCPS2のROMは大きさの比較用)
中身は相乗りして買った色々な人の基板w.他の人のものはマニアックすぎて全然わかりません・・・.
これが超でかいせいで,あの巨大な箱になったわけか・・・w.というか,これを秋葉原に持って行かなければならんのかw
自分のはこのMVS 1本だけw
ビスコのGOAL!GOAL!GOAL!です.
まあ,サッカーゲームなわけですがw
このタイトル,少なくとも業務用については国内販売されなかったってことでいいのかな.ビスコは他にもそういうのが多くてなかなか険しいですね・・・.もちろん,日本版のBIOSのマザーボードでは日本語のメッセージが出ます.
あと,ロボアーミー.昨日突然送られてきましたw.ありがとうございます.
何で車に変身するのかがよくわからないですね・・・w
[コメントを書く]
2011年10月16日 (日)
■スパIIX 電池レス化
さらにスパIIXの電池レス化を進めています.命令とデータの切り分けは,1個目のROMが細々としていて地獄でしたが,後の方のROMに行くに連れて次第にデータ領域が増え,徐々に楽になりました.まさに渋滞を抜けるような感覚w.まあそれでも境界のチェックは非常に手間でしたが・・・.
で,何とか6個目までデータ領域の抽出が終わったので,今度はプログラム自体の改修を行います.ここでは,メモリとして0xfffff0より後ろの領域を読み書きしないようにするのと,0x400000からの16Byteくらいに配置されているレジスタへのアクセスを0xfffff0からの16Byteに移す修正を行います.
0xfffff0は,メモリの後ろの方なので,メモリの初期化やチェックで読み書きされるケースと,スタックとして使われるケースが考えられます.メモリの初期化やチェックの処理はすぐにみつかり,カウンタの初期値を減らすことであっさり回避できました.
一方,スタックについては,スパIIXではSSPがこの領域を使うようになっていました.まあ普通に動いている間はSSPなんて使わないだろうと思っていたんですが,起動直後にわざとトラップを発生させて例外処理とかやりまくっているため,普通に対処が必要なことが判明.対処は,SSPの初期値を0から0xfffff0にずらせばいいだけなので,0番地に0xfffff0と書いて修正完了・・・と思いきや,しばらく動かすといつの間にか0xfffff0より後ろが使われるようになりますね・・・.おかしい・・・と思って逆アセンブル結果を読み返したら,何か例外処理の中でわざわざA7に0を書き直す処理をやっていました.くそー.ここを0xfff0に書き換えて今度こそ修正完了.ふぅ.
これでようやく起動シーケンスを抜けるようにはなったんですが,ちょっと動いてはすぐに例外が発生してリセット の繰り返しで,なかなかタイトル画面まで到達してくれません.まあでも,トレースの取り方を覚えたお陰で,解析が非常に楽にはなりました(笑).セイヴァー2のときもこれを知っていればもっと楽だったんだろうなぁ・・・w.結構範囲の指定間違いや見落としなんかが見つかりました.やはり怪しいところは,復号化した方からJMPやRTSを探してチェックする必要がありそうですね.うーむ,ツールに逆アセンブラ組み込めないかなぁ・・・.
まあ,そんなこんなで,最初のリュウとケンが戦って,その後乱入があってフェイロンが選ばれるあたりまでは進むようになりました.ホンコンにステージが切り替わる瞬間にリセットがかかるんで,まだまだ先は長そうですが,サクッと終わらせたいですねー.そして,今回の経験で新たに得たことを忘れないうちにツールに組み込んで,さらにもう少し楽にやれるようにしたいなぁとw.手元には電池が切れてるタイトルが,まだ他にもまだ数本あるので・・・.
しかしスパIIXは先頭4MByteが全部暗号化対象なんですよねー.最後の1MByteは多分全部データなのでそのままでよさそうですが,それでも実機で動かす際はEPROMを6個も焼かなければならないというのが何とも・・・w
[コメントを書く]
2011年10月15日 (土)
■秋葉原
昼間は昨日から始めたスパIIXの電池レス化作業の続きを実施.プログラムとデータがちょこちょこ入り組んでいて,頭が痛くなりそうです.ただ,ツールがそれなりに機能してくれて,ぱっと見だと見落としそうな命令やデータの存在を教えてくれるのがありがたい感じ.
で,夕方からは秋葉原に行ってきました.ラーメン食べたい病が発症していたので,千石に行ってマックジャパンに行った後は,影武者で朝・昼・晩ご飯を兼ねた油そばを注文.うむ,満足.影武者の油そばは,何となくポクポクポクチンの変なメニュー (闇ポクとか) を思い出しますw
影武者の後は,トラタワへ移動.相変わらずこの時間の8Fは人が多い・・・w.今日はマイコンソフトの中の人もお仕事でいらしていましたw.基板を見ながらお話ししたり,取り置きをお願いしていた基板とかを購入した後は,7Fに移動.さっきご飯を食べたばかりなので,飲みはパスして軽く遊んでから撤収しました.虫姫さま1.5は初クリアです.やっぱ無印よりだいぶ簡単になってるんですかねw.
あと何かと話題のゲットスターも遊んでみました(笑).雰囲気的にはファミコンの凡作っぽい感じですね・・・w.1位のスコア結構すごいなーと思ってゲームオーバー後のネームエントリを見てみたらニチブツくんでした(笑)
[コメントを書く]
2011年10月19日から2011年10月15日までの日記を表示中
Pleasure Goalも日本だとNEOGEO CDでしか出ていないみたいで,
これまた入手難な感じですw