« Ichigojam 用逆アセンブラ 印刷機能付き | トップページ | Ichigojam の WS.LED コマンド »

Ichigojam マシン語デバッグ術

 コードレビューが一番効果的なんだけど…。

 たった数十バイトのマシン語でも暴走した時は一瞬途方にくれますね…。特に Ichigojam のようなデバッグ環境がほとんど存在しないような場合にどうしたらいいのか、頭をひねります。自己流を持ってる人は確認の意味でも IYN のやり方と比較してみてください。

 デバッグで必要なのはとにかくレジスタの値を見ることです。暴走するのは、とにかくレジスタの初期設定がおかしい時が多いのです。ループさせるコードは IYN は経験上ほとんど間違えずにループしています。アセンブラを書いていてループさせること自体にミスを含む要素はかなり少ないと考えています。

 レジスタの値を見るためには、Ichigojam の場合は R0 に目的の値を代入して BASIC に制御を返す必要があります。つまりループが始まる前に各レジスタの初期値を R0 に入れて RET するコードを書いて、それぞれのレジスタが設計意図通りなのかすべて見回しておくことです。具体的にはマシン語のループのコードにアポストロフィ(')を入れてコメントアウトしてからアセンブラ asm15 にかけて ?HEX$(USR(#700,0)) などと一発実行するわけです。

 Ichigojam の USR 関数は R1 の値を最初にベースアドレスとして用いることが多いので、このレジスタを別用途に流用するときは十分注意が必要です。IYN は R2 に VRAM の先頭アドレス #900 を作っておいて、R2 = R2 + R1 として実VRAM先頭アドレスにしていたのに、R1 を VRAM の最後アドレスにしようとしたときに R1 = R2 + R1 などともう一度ベースアドレスを加算してしまうというミスをしていたのでした。

 自分も Ichigojam のプログラミングを習得してゲーム開発をしてみたいとお考えのあなた、ベーマガ投稿研究会のメンバーになってPCN秋葉原で私と一緒に活動しましょう!

« Ichigojam 用逆アセンブラ 印刷機能付き | トップページ | Ichigojam の WS.LED コマンド »

電子回路工作」カテゴリの記事

コメント

この記事へのコメントは終了しました。

2022年3月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ