まずはasmソースから実行ファイル(.NES形式)を生成できるアセンブラが必要です。このnesasmをダウンロードしてください。 NESファイルを実行するためのファミコンエミュレータも必要です。これは好きなものを使えば良いでしょう。 できればメモリ表示機能があるエミュが望ましいです。デバッガ機能と逆アセンブル機能もあるといいですね。 ファミコンのエミュレータはどこで手に入れるのかって?ネットで探してください。フリーのものがいくらでもあります。
(NES開発の全体の流れを知りたい人は、NES開発プロセスをご覧ください。)
A アキュムレータ。計算に使います。 X,Y インデックス。メモリアクセスに使います。アセンブラは、ニーモニックと言われる命令コマンドでプログラムを記述します。以下は、レジスタに16進数の値を格納する例です。
lda #$10 ; 10(16進数)をAレジスタにロード(格納)する。 ldx #$20 ; 20(16進数)をXレジスタにロード(格納)する。 ldy #$30 ; 30(16進数)をYレジスタにロード(格納)する。数字の前の$は16進数という意味で、#は値という意味を示します。;はコメントです。C言語やJavaで言えば//、VBなら'ですね。
2進数は%を先頭につけ、何もつけないと10進数になります。
lda #%00100001 ; 2進数をAレジスタにロード(格納)する。 ldx #10 ; 10(10進数)をXレジスタにロード(格納)する。 ldy #$10 ; 10(16進数)をYレジスタにロード(格納)する。
lda $4016 ; 4016番地(16進数)の値をAレジスタにロードする。 ldx $4016 ; 4016番地(16進数)の値をXレジスタにロードする。 ldy $4016 ; 4016番地(16進数)の値をYレジスタにロードする。上の3つの例のうちの1つ目だと、$4016番地の値に01が入っているとしたら、Aレジスタに01が入るということです。 「アドレス」と「そのアドレスの場所の値」の関係は、C言語で言えばポインタ変数に当たります。 まぁこのサイトの目的はファミコンエミュを動かすことだけなので、よくわからなくても先に進むのもいいかもしれません。
sta $2004 ; Aレジスタの値を2004番地(16進数)番地にストア(保存)する。 sty $2002 ; Yレジスタの値を2002番地(16進数)番地にストア(保存)する。 stx $FF ; Xレジスタの値を00FF番地(16進数)番地にストア(保存)する。ここまで説明した命令の動作を図に表すと以下のようになります。
ところで、ファミコンのメモリ構成は、どのようになっているのでしょうか?RAM・ROM領域の分け方を、「メモリマップ」と言います。 大雑把に書くと、以下のようになっています。
$0000〜$07FF RAM(ユーザーが自由に使える) $0800〜$1FFF RAMのミラー $2000〜$2007 I/Oレジスタ(ここを操作して画面やボタンの入出力操作を行います) $2008〜$3FFF I/Oレジスタのミラー $4000〜$401F I/Oレジスタ $4020〜$5FFF 拡張ROM用 $6000〜$7FFF バックアップRAM用 $8000〜$BFFF プログラムROM $C000〜$FFFF プログラムROM自由に使えるメモリは、$0000〜$07FFまでの2キロバイトということです。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||