Caution!
This tips does recommend VisualBoyAdvance v1.4 or early version.
※注意! [Apr15,2003]
どうやらVisualBoyAdvanceのVersion1.5から、ここで紹介するasmの表示部分が動作しなくなった模様です。未検証ですが表示部分を、VBAのwebページ[home]で配布している libVBA 内の表示関数に差し替えればよいと思われます。また、可変個の引数の展開等は、このまま利用可能と思われます。
あー。デバッグが面倒!ってことで、こんな関数を作ってみました。エミュレータの標準出力(っていうのかな?)へ、printf互換で文字を出力する関数です。VisualBoyAdvance配布ページのFAQを参考にさせていただいています。Devkit-Advance以外での動作は保障できません。
//----------------------------------------
#define DBPRINTBUFSIZE 256
char *dbprint(char *fmt, ...)
{
static char str[ DBPRINTBUFSIZE ];
va_list arglist;
// 初期化
str[0]='\0';
// 可変引数変換
va_start(arglist, fmt); // 可変個の引数の初期化
vsprintf(str, fmt, arglist); // 可変個の引数を変換
va_end(arglist); // 可変個の引数のリセット
// 表示
asm volatile("mov r0, %0;" // Visual Boy Advance(Mappy) Debug Output
"swi 0xff;"
:// no ouput
:"r" (str)
:"r0");
return(str);
}
使い方は、
[Source]
int xpos=20,ypos=30;
dbprint("xpos=%d,ypos=%d\n",xpos,ypos);
[出力]
xpos=20,ypos=30
このような感じにエミュレータの出力に文字を書いてくれます。詳しい使い方は ソースと一緒に入っています。
しかし、超久々の書き込み(笑い)
注意!
実機でこのプログラムを動作させた場合、該当部分で大概リセットがかかります。実機での動作時には、コメントアウトしてください。