エミュレータのデバッグコンソール

VisualBoyAdvance-1.8.0-beta3には嬉しいことにデバッグ用のコンソールがTools->Loggingについています。このコンソールを使えば処理の順番が正しく行われたかのチェックや、変数の値を見ることも可能になります。俗にいうprintfデバックです。

1.png

表示にはVBA方式とMappy方式の2種類あり、Mappy方式の方が優れているのでこちらを利用してください。VBA方式は「swi 0xff」を使用してエミュレータの独自処理にフックさせています。実機で動かすと素直にswi命令が動いてしまい、破綻しますので推奨されません。対するMappy方式はldr、andなどの無意味なシグネチャ処理によって実現しています。とても行儀が良いです。

void mappylog(char* buf)
{
	asm("mov r2, %0; ldr r0,=0xc0ded00d; and r0,r0" :: "r"(buf) : "r2", "r0");
}
@ Functions available to be used with VBA
@ Compile with GAS
        
	.file	"vba.s"
	.section .iwram,"ax",%progbits
	.code	16
	.text

        .align 2
        .global vbalog
        .thumb_func
        .type   vbalog,function
@ log a message to VBA's output console or GDB console
@ r0=message to log
vbalog:
        swi 0xff
        bx lr

	.data

自然に帰ろう

テキスト出力できるということはprintf関数で%xや%dしよう、と考えたくなるものです。しかしlibcを使うということは文明の利器を使って解決するようなもので、ラクな道を選択しただけです。自分の胸に手を当てて少し考えてください。GBAプログラミングの楽しみとは大いなる無駄であることが醍醐味です。こんな低レイヤーよりpythonやgo言語を使った方がツールに振り回されることなくゲーム開発に専念できます。アウトドアキャンプを満喫したいのなら火起こしでライターを使うのではなく、自然に落ちているものだけで自作すべきです。つまりprintfを自作するべきだと私は考えています(爆。引数周りが非常にわかりずらく、理解をするのは難しいですが、こういう世界もあるんだな程度には感じとっていただければ幸いです。

履歴


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS