ギコ猫さんのところで修行中

とりあえず公開されているエミュレータを使って動かせる簡単なゲームを作ってみたいと思ってギコ猫でもわかるファミコンプログラミング 様 のところで修行中。
しかし、エミュとかソフトとか作ってる人って(当たり前だけど)本職の人多いんだなぁ

さて、ド素人の私がつまずいたところとかのメモを残しておこうかな(書いておかないと数日後には忘れると思う。鳥頭なので)
ほんとに基本的なところばっかりだけど。

nesasmとは:
nesasmはアセンブラ。アセンブリ言語で書かれたプログラムを読み込んで、nesファイルという機械が読めるファイルに変換してくれる。ちなみに、このnesファイルを読み取るのがfceuxのようなnesエミュレータ。

アセンブリ言語で大事なこと:

・lda,staみたいな命令は基本。
レジスタに値を入れたり、レジスタの値をどこかのアドレスに入れたりする。結局、こういう命令は算術命令含めてすべて転送命令しかないんですな。
この命令一覧はNES研究室様のサイトが超わかりやすい↓。
http://hp.vector.co.jp/authors/VA042397/nes/6502.html
余談だけどこの辺のことはCPUの創り方っていう本で学んだからすんなりと理解できそう。この本超おすすめ。表紙に騙されてはならない。

・.byteとか.textとかの、初めにピリオドが付く命令のことを「疑似命令」という。
これは上記の普通の命令と違って、CPUがすることを直接書いているわけではない。アセンブラに対する指令というイメージ。いろいろ便利な機能があるみたい。
・・・ってことは、この疑似命令一覧はアセンブラによって違うのか。調べたら一覧表あるかなぁありました↓
http://www.geocities.jp/g_lsluk/module_6502.html
これを作った人は神か。超見やすいぞ
nesasm特有の疑似命令として分かりやすいのは.INESMAPとかかな。マッパー番号とかnesasmだからこそあるって感じですな。

・ラベルとは何か
プログラム中の任意の命令があるアドレスに付ける名前。数学で言うと、「座標(0,0)の点に点Oという名前を付ける」とかいうけど、この名前のことをラベルという。
まあ、C言語で言うポインタみたいなものだよ。いちいちアドレスの数字使うとわけわかんなくなるからアドレスに名前を付けるってイメージ。ポインタがよく分からなかったら#defineみたいなものと思えばいい。
ただ、注意してほしいのは、プログラム中の任意の命令のアドレスに名前を付けられるってこと。
$1000とか、アドレスを指定してラベルをつけるわけじゃないよ。だから、おもな使い方はjmp命令。プログラム中の適当な場所から、ラベルの命令の位置にジャンプする。
言葉で言ってもわかりにくいからこれは実際のプログラムを見るべきだね。ギコ猫さんのサンプルプログラムでもいいし、そもそも「アセンブリ ラベル」とか適当な言葉でweb検索してもいっぱいサンプルプログラムあるぞ。

コメント

タイトルとURLをコピーしました