第４章

## 第４章　パレット

### パレットの作成

ファミコンは64色中、同時に16色使えます。パレットで決められた色を指定します。 パレットの作成には、トップページからリンクされているjoker21のPalette Editor v2(pal.exe)を使用してください。 このツールは古いランタイムを使用しているので、vb40032.dllが無いというエラーが出るかもしれません。 その場合は、これを落としてvb40032.dllをpal.exeと同じ場所に入れてください。

上がBG、下がスプライトのパレットです。 左から0番、1番、、、となっています。スプライトやBGは、0･1･2･3、4･5･6･7、のように、連番で4色一組で使われます。 ただし、0番、4番、8番、12番は背景色になります。このうちスプライトの0番は背景全体の色になります。

### パレットを読み込む

パレットデータは、VRAMの$3F00以降に読み込みます。そのためにはまず、VRAMアドレスレジスタの$2006に、 ロード先のアドレス$3F00を書き込みます。しかしレジスタは8ﾋﾞｯﾄで、16進数で2桁しかありません。 このような場合は、以下のように2回に分けて書き込みます。

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

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

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

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 ourpal, x ; Aに(ourpal + x)番地のパレットをロードする

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

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

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

ラベルは":"をつけなくても機能しますが、このサイトでは":"をつけるように統一します。

トップページ 前のページ 次のページ

FC2 |  | キャッシング 花 | 無料 掲示板 無料ホームページ