読者です 読者をやめる 読者になる 読者になる

ゲームボーイエミュレーター bgb debugger機能 +意味深なニーモニック セーラームーン

bgb   debugger についてメモ書き

 

〇Debugger画面について ショートカットキー

◎Search
Ctrl + F 検索(入力して検索) 例:'ld a,'
Ctrl + C 検索を続ける↑のとかを
Ctrl + N 次のブレークポイントへ行く
Ctrl + B 前のブレークポイントへ戻る
Ctrl + A PCへ戻る(次に実行するニーモニックへ戻る)


◎Run
F9   RUN        ブレークポイントまで進む
F7   Trace       PC(ニーモニック)を1行進む
F3   Run To Next Line  Callでも、次の行まで進む(jpなら飛んだ先へ進む)
Alt+A Animate       ブレークポイントまで ががーっっと自動で進む
F4   Run To Cousor ニーモニックの自分がマウスカーソル置いた行まで処理を進める
F6   Jump To Cousor   ニーモニックの自分が行きたい行へ無理やり飛ぶ
    CallCousor     ニーモニックの自分がマウスカーソル置いた行へ無理やり飛ぶ?
F8   StepOut      Callの外から出るまで処理を進める   

 

◎Execution Profiler

・logging mode  サブルーチンに飛んだ時、実行される場所がすべて青くなる いいぞこれ^^

・あとは知らん。

 

〇いろいろメモ

・ゲーム中、ニーモニックの画面つっつくと

むりくりvblankまで処理してストップした状態になる

・vblankから次のvblankまでが1フレームである可能性がある。

・vblank割り込みの瞬間の処理、これが全く分からん。音や画面更新(画面上の前回フレームで書き込んだ古いスプライト削除?)が行われている。。

 ====================================

ゲームボーイの仕様 メモ

Z80Cの命令

Google 翻訳

 

演算とか

Google 翻訳

 

メモリマップ

Google 翻訳

 

はえ^~やっぱ32bit以降のCPUとは勝手が大分違いますねぇ…

 ====================================

〇謎のニーモニック

決して

美少女戦士セーラームーンゲームボーイ

であるとは限らないので、

べつにゲームボーイのロムイメージを

アセンブリ言語にして自分なりに解析したものではない。

よって、Z80Cとは関係あったりなかったりするかもしれない。

 

あと、IDA Free 頼むから8bitCPU、Z80Cだけでもいいから対応してほしい。

(届かぬ想い)

============================
vblank 0040からの処理

0040 jp 0365

AにFF8Aを代入

call 03E1
call FF80

rst 08 (8番の処理へ飛ぶ
------------------------
8番

jr nc 000E
(Cにカラスが飛んでない時000Eへ飛ぶ)


------------------------
0000E以降

ROM0:0012 jp hl(今回は389)


------------------------
0389以降

call
07EF
068C

FF43 scrollXを aで上書き

jp 225F
------------------------
225F以降
(次のvblankまでここに戻ってくることはない)

ret z

0379へ飛ぶ


------------------------
0379以降

03B4に飛ぶ
------------------------
03B4以降

call 5851
大量に pop
reti 035Fへ (割り込みからの復帰という意味)


------------------------
035f

0362 jr nz,035f
(Zがカラス飛んでないと035Fやり直し

ret(019Eへ飛ぶ)

----------
019E

jr0174
(0174へ飛ぶ


------------------------
0174

call 05C9

jr nz,019B
(n、z両方にカラスなので飛ばない)

call 0488


rst 8番
===========================================
8番

000Eへ飛ぶ
------------------------
000E

0012 jp hl

hlには189Cが入っていたので
189Cに飛ぶ

-------------------------
189C

18A8へ飛ぶ
-------------------------
18A8

call 18E3


aにff8c入れる
bit 3,a


jr z,18C7 zにカラスあるので飛ぶ

^^^^^^^^^^^^^^^^^^
18E3
aを0で初期化

-------------------------
18c7

call 1429
call 2f87
call 0812

jr z,18DC Zにカラスがあるので飛ぶ


~~~~~~~~~~~~~~~~~
1429
c520 c521を操作
c520の値を10にしている
c521の値を00にしている

????何をしているのかわからん。

~~~~~~~~~~~~~~~~~
2F87

aの値をCDとする
:D004の値にa代入(CDが入る)

hlに:D040の値を入れる
cにhlの値を入れる

sla c を3回(cを3回←にシフト)

bに0を代入

hlをDA00のアドレス代入 (hlはDA00を指す)
hlにbcを足す
aにhl(:DA00+bc)の値を入れる (ldiブロック転送)


cp a,02(aの値が02か比較)

jr nz,2FA8 (Z≠0ならば、2FA8行(×下 〇その行)へ移動)
  →aを0に
jp nz,3029

call :3039
~~~~~~~~~~~~~~~~~~~
:3039

--------------------
18DC

call 2144
call 08AC ←画像1F更新(書き込み)

ret 緑→スタック 0187なので0187に戻る

 

----------------------
0187


jr nz,019b


-----------------------
019B この下を実行せず、vblankに戻っている


call 035A  
 →ly=90の時、なぜかvblankに戻る原因不明
vblankからは、この書の一番上に戻る

vblankに戻ると、音が出たり、前のFのスプライト画像が
消えたりする。

================================

 

〇わかったこと。。

・timer割り込みとかそういうのはない…と思う。

・00008?のリセットは、1F間で2回

・最後はhalt命令で、CPU停止させた状態でvblank割り込みが来るまで待つ

 

 

 

今後本格的なメモリアクセス(ハードウェアアクセス)のブレークポイント差し込みと

逆追いからの音楽データ搾取や、敵の挙動探しが始まっていくんやなて。