ドラクエ風RPGファミコンプログラム講座
【NES 基礎知識編】
【Vramのアクセス方法】
*Vramにアクセスするには、I/Oポートのアドレスレジスタ $2006 と
データーレジスタ $2007 を使います、データーレジスタを使ううえで注意すべき点
が3つほどあります。
1.データーレジスタは8ビットなので2回に分けてストアすいます、
1回目がアドレスの上位2回目が下位の順番です、その後 $2007 を書き込みます。
2.データーレジスタをアクセスすると $2005 のスクロールレジスタも書き換え
られてしまうため $2005 も適正な値に修正する必要があります。
3.ファミコンでは、VRAMにアクセスするにはVBlank時にする必要があります、
VBlankとはPPUが画面を描画する合間のブランクを言います。
[ファミコンのパレット]
*ファミコンのパレットテーブルは、VRAMの $3f00~$3f1f で32byteです、
パレットはBG、スプライト各4色ずつ4セットその内0番目の色は透明色で
各パレット共通です、尚パレットの総色数は52色で、
下の画像はカラーサンプルです。
【画像1】
【パレットの設定】
palette:
jsr VB0
lda #$3f
sta $2006
lda #$00
sta $2006
ldx #0
pal_loop:
lda pall,x
sta $2007
inx
cpx #32
bne pal_loop
pall:
.db $0f,$30,$00,$11
.db $0f,$10,$1a,$26
.db $0f,$03,$04,$05
.db $0f,$06,$07,$08
.db $0f,$35,$30,$12
.db $0f,$26,$24,$25
.db $0f,$26,$27,$28
.db $0f,$11,$12,$13
*jsr VB0はVBlankを待つルーチン、lda #$3f~sta $2006はVramアドレスの設定で
ldyはインデックスカウンターの設定、lda pall,x・sta $2007はパレットDATA
からXレジスタのインデックス付きでDATAを読み出しています。
cpx #32 はパレットDATAの個数でカウントしています。比較してXが32になるまで
DATAの書き込みを続けます。
pall: はラベルでDATAのアドレスを表します、 .dbはDATAの領域の確保で
C言語でいえば、配列の定義のようなものです。
【画像2】