ドラクエ風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色で、

  下の画像はカラーサンプルです。

  

 

f:id:chien1956:20200104080721j:plain

【画像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

rts

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言語でいえば、配列の定義のようなものです。

 

f:id:chien1956:20200218121058p:plain

【画像2】