第4章 パレット


パレットの作成

 ファミコンはパレットを利用して、64色中、同時に16色使えます。 パレットの作成には、これを使用してください。

pal.exeを実行すると、このような画面が出ます。上段の16x2のマスは作成するパレットデータ、下段の16x4のマスは選択する色です。ここから色を上にドラッグドロップします。 上段の上の行がBG、下の行がスプライトのパレットです。 左から0番、1番、2番、、となります。スプライトやBGは、0・1・2・3、4・5・6・7、のように、連番で4色一組で使われます。 ただし、0番、4番、8番、12番は背景色になります。このうちスプライトの0番は背景全体の色になります。

パレットを読み込む

 パレットデータは、VRAMの$3F00以降に読み込みます。そのためにはまず、VRAMアドレスレジスタの$2006に、 ロード先のアドレス$3F00を書き込みます。しかしレジスタのサイズは8ビットなので、2桁しか使えません。 このような16ビットの値を書き込む場合は、以下のように2回に分けて書き込みます。

	lda #$3F
	sta $2006
	lda #$00
	sta $2006

 この後、2つ目のVRAMアドレスレジスタの$2007に、指定したアドレスにロードするパレットの値(1バイト)を書き込みます。 書き込むたびに対象が次のアドレスに自動的に移るので、必要な数だけストア(sta)を繰り返せば良いようになっています。

インデックスレジスタによるメモリアクセス

 XレジスタとYレジスタはインデックスレジスタです。以下のような使い方ができます。

	;Xの値は6

	lda $2002, x    ; Aに($2002+6)番地、つまり$2008の値をロードする。

	;Yの値は9

	lda $2000, y    ; Aに($2000+9)番地、つまり$2009の値をロードする。

 このインデックスレジスタの機能で、先ほどのパレットからのデータを順次読み込むことができます。

	pallabel: .incbin "giko.pal"  ; パレットをincludeする
	
	lda pallabel, x  ; Aに(pallabel+x)の値をロードする。

パレットをロードするコード

 以下はパレットをロードするプログラムの例です。

	; VRAMアドレスレジスタの$2006に、パレットのロード先のアドレス$3F00を指定する。
	lda #$3F
	sta $2006
	lda #$00
	sta $2006

	ldx #$00 ; Xに0をロードする。パレットの0番目
loadPal: ; ラベルは、「ラベル名+:」の形式で記述
	lda pallabel, x ; Aに(ourpal + x)番地のパレットをロードする

	sta $2007 ; $2007にパレットの値を読み込む

	inx ; まだ説明されて無いが、これはXレジスタに値を1加算している

	cpx #32 ; Xを32(10進数。BGとスプライトのパレットの総数)と比較して同じかどうか比較している	
	bne loadPal ;	上が等しくない場合は、loadPalラベルの位置にジャンプする
	; Xが32ならパレットロード終了

 ラベルは":"をつけなくても良いのですが、このサイトでは":"をつけるように統一します。
トップページ 前のページ 次のページ
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送